我正在努力修复代码中的一个错误。变量(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 = [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.
中断循环
如果要检查文件夹中包含的所有扩展,则fext和fname变量应返回可迭代的。尝试以下列表综合。
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]