用户输入仅适用于文件夹中的最后一个文件扩展名

User input only works for the last file extension in a folder

我正在努力修复我的代码中的错误。变量 (fext) 仅适用于文件夹中的最后一个文件。因此,如果碰巧最后一个文件是 'jpg',那么我的代码将按计划继续。但是,如果碰巧最后一个文件是 'gpx' 或 'csv',则即使文件夹中有 'jpg' 文件,也会激活 Else 错误。

有人可以帮我改进我的代码,以便在所有文件类型都在文件夹中的情况下可以正常工作吗?我对 Python 还是很陌生,不知道如何继续。

下面是我的代码:

import os, string
from os.path import isfile, join

file_path = input("Enter the folder link: ")
print("")
TF = False

path_it = (os.path.join(root, filename)
    for root, _, filenames in os.walk(file_path)
    for filename in filenames)
for path in path_it:
    fext = os.path.splitext(os.path.basename(path))[1]
    fname = os.path.splitext(os.path.basename(path))[0]

while True:
    file_type = input("Enter file extention (e.g. txt, wav, jpg, gpx, pdf): ")
    print(file_type)
    if file_type in fext:
        TF = True
        break
    else:
        print("\n*** There is no '" + file_type + "' file extension in this folder, please try again.\n") 

Other code...

谢谢

如果您要检查文件夹中包含的所有扩展名,fext 和 fname 变量应该 return 是可迭代的。尝试以下列表理解。

fext = [os.path.splitext(os.path.basename(path))[1] for path in path_it]
fname = [os.path.splitext(os.path.basename(path))[1] for path in path_it]

列表理解可能是您获得所需结果的最佳解决方案。这会将所有文件类型存储在列表中传递的目录中。

fext = [os.path.splitext(os.path.basename(path))[1] for path in path_it]
fname = [os.path.splitext(os.path.basename(path))[1] for path in path_it]

但是,您还需要确保输入的文件类型与格式匹配。上面会给你(例如)['.csv', '.pdf', '.gpx'],所以你需要确保输入的格式是相同的,换句话说,不只是 'csv' 而是 '.csv' 否则将不匹配。

while循环也可以改成while not TF,一旦TF改成True,循环就会被打破,而不是使用break.[=17来打破循环=]