使用os.walk读取文件顺序随机,如何对输出的文件名进行排序?
解决方案
os.walk返回的文件名列表顺序由底层文件系统的存储逻辑决定,默认不会按照文件名的字面或数字顺序返回,你可以通过以下两种方式实现排序:
- 基础字典序排序(适配你当前个位数命名的文件场景)
直接调用内置sorted()函数对os.walk返回的文件列表做升序处理即可,修改后的代码如下:
from os import walk def import_folder(path): for root, dirs, files in walk(path): # 对文件列表做升序排序 sorted_files = sorted(files) print(sorted_files) import_folder('/Users/leolepage/Documents/Python/Tutoriels/Video games/Pygame/Platformer/graphics/character/run')
运行后会输出['1.png', '2.png', '3.png', '4.png', '5.png', '6.png']的有序结果。
- 自然数字排序(适配多位数文件名的通用场景)
如果后续文件名包含两位及以上数字(比如10.png、11.png),基础字典序排序会出现10.png排在2.png之前的问题,此时可以提取文件名中的数字作为排序键实现自然排序,代码如下:
from os import walk import re # 提取文件名中的数字作为排序依据 def get_file_sort_key(filename): num_match = re.search(r'(\d+)\.png', filename) return int(num_match.group(1)) if num_match else float('inf') def import_folder(path): for root, dirs, files in walk(path): sorted_files = sorted(files, key=get_file_sort_key) print(sorted_files) import_folder('/Users/leolepage/Documents/Python/Tutoriels/Video games/Pygame/Platformer/graphics/character/run')
内容的提问来源于stack exchange,提问作者Léo Lepage
相关产品推荐
相关产品推荐

