if 语句在 while 循环中传递

问题描述 投票:0回答:1

我最近开始学习编码,想为 python 制作一个文件排序器,先按文件类型排序,然后按文件创建日期排序。为了控制排序,我想创建一个输入来实现这一点(sortByDate = input(“如果您想按日期类型 y 排序:”))。但由于某种原因,SBD(按日期排序)变量一直作为 True 传递,而不是被分类为 False 并打破循环。

import pathlib
import os, time
import shutil

Files=[]
folderTypes={}
#files that dont need to be moved
DMFiles = [".ini"]
SBD = False

#Input stage.
while True :
    path = pathlib.Path(input("Enter in the directories path, to stop type stop:"))
    if str(path) == "stop":
        print("Program stoped.")
        break
    elif path.is_dir() == False:
        print("ERROR wrong directory! \n(check spelling or path)")
        continue
    
    sortByDate = input("If you want to sort by date type y:")
    if sortByDate.lower() == "y" or "yes":
        SBD = True
        FolderDateTypes = {}

    #Identifying files and folders, and creating new folders.
    for item in path.iterdir():
        if item.is_file():
            if item.suffix not in DMFiles:
                dir =  path / item.suffix.replace(".", "")
                Files.append(item)
                folderTypes.setdefault(str(item.suffix), dir) if item.suffix not in folderTypes else None
                try:
                    pathlib.Path(dir).mkdir()
                    print(f"New directory created - {dir}")
                except FileExistsError:
                    continue
            else:
                continue
        else:
            continue

    #Moving files to their respective folders.
    print("!Starting to organize files!".center(100, "-"))
    for file in Files:
        newPath = folderTypes.get(file.suffix) / file.name
        shutil.move(file, newPath)
        print(f"{file.name} - succesfuly moved!")
    
    if SBD == True:
        for folder in folderTypes:
            folderFiles = folderTypes.get(folder).iterdir()
            dirDateFolderList = []
            for file in folderFiles:
                fileDateFolder = file.parent / str(time.localtime(os.path.getctime(file)).tm_year)
                if fileDateFolder not in dirDateFolderList:
                    dirDateFolderList.append(fileDateFolder)
                    pathlib.Path(fileDateFolder).mkdir()
                    print(f"New directory created - {fileDateFolder}")
                shutil.move(file, fileDateFolder / file.name)
                print(f"{file.name} - succesfuly moved!")
    else:
        break
print("!DONE!".center(100, "-"))

程序首先创建一些所需的列表和变量,然后它要求输入,我在其中输入要排序的文件夹路径。之后,程序扫描文件并创建文件类型(键)的字典和这些文件夹的新路径(值),然后创建文件夹。然后它将文件移动到新文件夹,之后即使 SBD 为 False,if statnet 也会执行。目标是通过在 sortByDate 变量中键入任何其他内容,不会更改 SBD 变量,并且会跳过程序的最后一步。 请治愈。

python if-statement variables while-loop
1个回答
0
投票

您的代码中的问题位于条件中

if sortByDate.lower() == "y" or "yes": 

在 while 循环中。条件

sortByDate.lower() == "y" 

转换为小写时将正确检查 sortByDate 是否等于“y”。但是,条件的第二部分或“yes”将始终评估为 True,因为非空字符串在 Python 中被视为 true。

尝试更改为

if sortByDate.lower() == "y" or sortByDate.lower() == "yes":
© www.soinside.com 2019 - 2024. All rights reserved.