繁体   English   中英

Python对文件进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM