python - 在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",....]
解决方案
你可以做 :
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])]
注意:虽然这可能不是最佳的,但可以完成任务。
推荐阅读
- r - 如何获得 R 安装日期?
- node.js - 使用 cPanel 的 NodeJs 中的环境变量
- lucene - Lucene (8.5.0) - 如何使用通配符突出显示已解析的查询?
- c# - 显示数据库中的图片
- spring-boot - 使用 Spring Boot liquibase 测试不适用于多个数据源
- reactjs - 将数据推送到 Firebase 的问题
- laravel - laravel 验证检查多维数组
- python - 如何根据 Pandas DataFrame 中其他列的值创建新列
- c++ - 抛出异常:读取访问冲突。**this** 是 nullptr。发生了
- sql - 返回 BAQ 中的最新记录