我有一个文件夹。在那里我有一些文件,filename_100,filename_101,filename_200,filename_201。我必须以相同的顺序读取文件。我使用了以下代码。但我无法得到预期的输出。它随机地从文件夹中读取文件。
代码:
for subdir, dirs, files in os.walk(order_path):
for file in files:
filepath = subdir + os.sep + file
有人可以建议我更好地解决这个问题吗?
答案 0 :(得分:1)
我怀疑文件在目录中有任何订单。但是如果你想对它们进行排序,只需使用sorted(...)
:
for subdir, dirs, files in os.walk(order_path):
for f in sorted(files):
print(os.path.join(subdir, f))
已编辑:更好地使用os.path.join(...)
将文件加入路径,它会处理您的操作系统分隔符等。
如果要按文件名中最后一个_
之后的任意数字排序,可以将sorting-directive更改为:
sorted(files, key=lambda x: x.split('_')[-1])
答案 1 :(得分:1)
您可能需要考虑按如下方式对文件名进行数字排序:
def get_number(filename):
if filename.find('_') != -1:
name, number = os.path.splitext(filename)[0].split('_')
return (name, int(number))
else:
return filename
for subdir, dirs, files in os.walk(order_path):
for file in sorted(files, key=get_number):
filepath = os.path.join(subdir, file)
print filepath
然后这将处理以下类型的命名:
filename_1.txt
filename_100.txt
filename_101.txt
filename_200.txt
filename2_1.txt
filename2_100.txt
filename2_101.txt
filename2_200.txt
该函数发现包含_
的任何文件,然后将该数字转换为整数,它返回一个包含该名称的元组,以便将不同命名的文件组合在一起。
如果您只对数字感兴趣,即每个文件都有不同的名称,但您仍想保留数字顺序,则替换get_number()
函数中的以下行:
return (int(number), name)