首页 > 解决方案 > 在python中对文件名列表进行数字排序

问题描述

我正在制作一个程序,显示由所述程序自动下载的图片。我有它,所以程序会列出所有图片作为 PIL.Image 对象。图片保存为 jpeg,并以数字命名(1.jpg、2.jpg、3.jpg、4.jpg、5.jpg......)。我遇到的问题是,当我尝试制作所述列表时,我需要获取所有图像的所有路径以制作 PIL.Image 对象。我使用了 os.listdir(path) 并且效果很好,直到我意识到它没有“排序”图像数字。这意味着它是这样的: [1.jpg,10.jpg,100.jpg,101.jpg......2.jpg,20.jpg....] 我需要一种方法来对这个列表进行排序所以它输出: [1.jpg,2.jpg,3.jpg.....] 我不能像整数那样排序,因为它们是末尾带有“.jpg”的字符串。我的问题的简化版本:

for i in os.listdir(path):
    ...
output: ["1.jpg","10.jpg","100.jpg", ...]

I want something to output: ["1.jpg","2.jpg","3.jpg",....]

标签: pythonpython-3.xlistsortingnumeric

解决方案


你可以做 :

nums = sorted([ int(num.split('.')[0]) for num in output]) #split the names and sort numbers
final_output = [ str(i)+".jpg" for i in nums] #append file extension and create another list.

一个班轮:

final_output = [ str(i)+".jpg" for i in sorted([ int(num.split('.')[0]) for num in output])]

注意:虽然这可能不是最佳的,但可以完成任务。


推荐阅读