用户输入仅适用于文件夹中的最后一个文件扩展名
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来打破循环=]
我正在努力修复我的代码中的错误。变量 (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来打破循环=]