Python中有序的os.listdir()

8 投票
2 回答
14165 浏览
提问于 2025-04-18 06:55

如何按顺序将文件添加到列表中

在我的文件夹里,有以下这些文件:slide1.xml, slide2.xml, slide3.xml ... slide13.xml

os.listdir(path) 这个命令返回的文件列表不是按顺序排列的

我试过这样做

files_list = [x for x in sorted(os.listdir(path+"/slides/")) if os.path.isfile(path+"/slides/"+x)]

输出结果是:['slide1.xml', 'slide10.xml', 'slide11.xml', 'slide12.xml', 'slide13.xml', 'slide2.xml', 'slide3.xml', 'slide3_COPY.xml', 'slide4.xml', 'slide5.xml', 'slide6.xml', 'slide7.xml', 'slide8.xml', 'slide9.xml']

2 个回答

1

你可能想要使用自己的排序函数

def custom_sort(x, y):
    pass
    #your custom sort

files_list = [x for x in sorted(os.listdir(path+"/slides/"), cmp=custom_sort) if os.path.isfile(path+"/slides/"+x)]

也可以查看 文档

还可以看看 natsort

10

按键排序:

import re
files = ['slide1.xml', 'slide10.xml', 'slide11.xml', 'slide12.xml', 'slide13.xml', 'slide2.xml', 'slide3.xml', 'slide3_COPY.xml', 'slide4.xml', 'slide5.xml', 'slide6.xml', 'slide7.xml', 'slide8.xml', 'slide9.xml']
ordered_files = sorted(files, key=lambda x: (int(re.sub('\D','',x)),x))

结果是 ['slide1.xml', 'slide2.xml', 'slide3.xml', 'slide3_COPY.xml', 'slide4.xml', 'slide5.xml', 'slide6.xml', 'slide7.xml', 'slide8.xml', 'slide9.xml', 'slide10.xml', 'slide11.xml', 'slide12.xml', 'slide13.xml']

撰写回答