[英]Python sorting with files
for root, dirs, files in
os.walk(r'\\cusfs01\userprof$\khalha\Desktop\AllSalesForecasting'):
for name in files:
sorted(files, key=lambda)
print(files)
我发现了许多使用物理列表进行排序的示例,但是由于我的文件列表仅位于此目录中,因此我不知道如何正确对其进行排序。 我有54个文件,并且这样做是在其中9似乎是最新文件,而我希望54出现在最后一个文件。 它似乎是一个重复的问题,但我不知道如何解决此问题,其他类似问题也无法解决。 我的文件都被命名为从0到54的数字。它们是csv filesm,因此文件是0.csv,1.csv,... 54.csv。 当我打印文件或尝试获取最后的文件名时,它显示为9.csv。 我希望它们按数字列出
>>> import os
>>> path = r'\\cusfs01\userprof$\khalha\Desktop\AllSalesForecasting'
>>> sorted(sum([files for _,_,files in os.walk(path)], []), key=lambda f: int(f.split('.')[0]))
['1.csv', '2.csv', '3.csv', '4.csv', '5.csv', '6.csv', '7.csv', '8.csv', '9.csv', '10.csv', '11.csv', '12.csv', '13.csv', '14.csv', '15.csv', '16.csv', '17.csv', '18.csv', '19.csv', '20.csv', '21.csv', '22.csv', '23.csv', '24.csv', '25.csv', '26.csv', '27.csv', '28.csv', '29.csv', '30.csv', '31.csv', '32.csv', '33.csv', '34.csv', '35.csv', '36.csv', '37.csv', '38.csv', '39.csv', '40.csv', '41.csv', '42.csv', '43.csv', '44.csv', '45.csv', '46.csv', '47.csv', '48.csv', '49.csv', '50.csv', '51.csv', '52.csv', '53.csv', '54.csv']
>>>
如果我理解您的问题,则文件的排列顺序与您想要的顺序相反。
您可能需要查看sorted()
的文档
我建议使用反向标志:
files = sorted(files, key=lambda, reverse=True)
sorted
将按字母顺序对字符串进行排序,并对整数和数字进行浮点运算。 使用键可以为函数提供一种对提供给文件的整数值进行排序的方法。 像这样:
sorted(files, lambda n: int(n.split('.')[0]))
拆分以除去文件扩展名,将int转换为整数。
编辑:
请注意。 sorted
返回排序列表。 files.sort
将排序。
您需要从迭代器创建一个列表,然后使用带有自定义键的sorted
。 由于sorted
操作不适当地进行,因此应将结果分配给变量:
path r'\\cusfs01\userprof$\khalha\Desktop\AllSalesForecasting'
file_list = []
for root, dirs, files in os.walk(path):
file_list.append(files)
res = sorted(file_list, key=lambda x: int(x.split('.')[0]))
一种更Pythonic的方法是提供可迭代的sorted
:
files = (files for root, dir, files in os.walk(path))
res = sorted(files, key=lambda x: int(x.split('.')[0]))
因为内部sorted
会创建一个新列表,所以即使输入的内容已经是列表,这也会更加有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.