如何按文件夹原始顺序打印其中的文件?
解决os.listdir输出文件名非自然排序的问题
os.listdir()默认按字符串字典序返回文件列表,这就是为什么"10.mp4"会排在"2.mp4"前面——字符串比较时,"1"的ASCII码小于"2",和数字大小逻辑无关。要实现自然数字排序,有两种常用方案:
方案1:自定义排序规则(无需额外依赖)
提取文件名中的数字部分转为整数,以此作为排序依据:
import os path = "你的目标文件夹路径" targetFile = os.listdir(path) # 拆分文件名与后缀,提取数字部分转为整数排序 sorted_files = sorted(targetFile, key=lambda filename: int(os.path.splitext(filename)[0])) for file in sorted_files: print(file)
逻辑说明:os.path.splitext(filename)[0]会去掉文件名的后缀(比如把"1.mp4"变成"1"),转成整数后就能按数字大小排序。
方案2:使用natsort库(适合复杂文件名场景)
如果文件名包含前缀、多段数字等复杂格式,推荐用专门处理自然排序的natsort库:
- 先安装库:
pip install natsort
- 代码实现:
from natsort import natsorted import os path = "你的目标文件夹路径" targetFile = os.listdir(path) sorted_files = natsorted(targetFile) for file in sorted_files: print(file)
natsorted()会自动识别字符串中的数字,按照自然逻辑排序,无需手动提取数字。
内容的提问来源于stack exchange,提问作者Learning Only
相关产品推荐
相关产品推荐

