从文件夹中读取文件的顺序与它们出现的顺序相同

时间:2015-12-15 10:20:57

标签: python python-2.7

我有一个文件夹。在那里我有一些文件,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

有人可以建议我更好地解决这个问题吗?

2 个答案:

答案 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)