Python中os.walk获取文件无序致Pygame动画异常,如何用sorted处理?
解决Pygame动画文件顺序混乱问题
os.walk返回的文件列表是文件系统存储的原始顺序,并非按文件名排序,直接使用会导致动画帧顺序错乱,用sorted()就能解决这个问题。
基础版修改(适配常规命名)
如果你的动画帧文件名是run_0.png、run_1.png这类按数字编号的,直接对文件列表排序即可:
from os import walk def import_folder(path): for _, __, img_files in walk(path): sorted_files = sorted(img_files) print(sorted_files) import_folder('../Graphics/character/run')
进阶版修改(精准按数字排序)
如果文件名里的数字是多位数(比如run_frame_01.png),直接字符串排序会出现10排在2前面的问题,这时候可以提取文件名中的数字作为排序依据:
from os import walk def import_folder(path): for _, __, img_files in walk(path): # 提取文件名中的数字部分,转成整数后排序 sorted_files = sorted(img_files, key=lambda x: int(x.split('_')[-1].split('.')[0])) print(sorted_files) import_folder('../Graphics/character/run')
更简洁的替代方案(无嵌套文件夹时)
如果你的动画帧都在目标文件夹里,没有子目录,用os.listdir()替代walk更高效:
import os def import_folder(path): # 只筛选图片文件 img_files = [f for f in os.listdir(path) if f.lower().endswith(('.png', '.jpg', '.jpeg'))] sorted_files = sorted(img_files) print(sorted_files) import_folder('../Graphics/character/run')
内容的提问来源于stack exchange,提问作者Quantum
相关产品推荐
相关产品推荐

