使用Python按正确顺序列出字母数字格式文件名时出现问题
问题产生原因
Python的os.listdir()返回的文件列表默认按照字符串字典序排序,字符串对比时会逐字符比较ASCII编码值:
例如对比C37572_00010.segd和C37572_0002.segd时,前7个字符C37572_0完全一致,第8个字符1的ASCII值小于2,所以系统会判定00010对应的文件更小,排在0002对应的文件之前,就会出现你看到的序号异常问题。
正确排序的实现方法
你只需要在排序时提取文件名中的序号部分,转为整数作为排序的依据即可,示例代码如下:
import os os.chdir(r'I:\SEGY\C37572') # 提取文件名中的序号转整数作为排序key sorted_files = sorted(os.listdir(), key=lambda file_name: int(file_name.split('_')[1].split('.')[0])) for g in sorted_files: print(g)
如果文件名格式存在波动,也可以用正则表达式精准匹配序号部分,兼容性更强:
import os import re os.chdir(r'I:\SEGY\C37572') sorted_files = sorted(os.listdir(), key=lambda file_name: int(re.search(r'_(\d+)\.segd$', file_name).group(1))) for g in sorted_files: print(g)
运行以上代码后输出的文件列表就会按照1、2、3……9、10、100、101的数值顺序正常排列。
内容的提问来源于stack exchange,提问作者Ebrahiem
相关产品推荐
相关产品推荐

