如何自定义Path排序规则以实现指定的文件排序顺序?
实现自定义文件排序顺序
默认的sorted()函数是按字符串字典序排序,所以会先排列同版本号下的不同序号文件。要实现你想要的顺序,核心是自定义排序键,让排序先按文件名末尾的数字(_0、_1这类)分组,再按版本号的自然顺序排序。
直接上可用代码:
from pathlib import Path def custom_sort_key(file_path): # 提取文件名(不含路径和后缀) filename = file_path.stem # 拆分出版本段和末尾数字段(格式为file_V{version}_{num}) _, version_str, num_str = filename.split('_') # 将版本号转为整数元组,确保按数字逻辑比较(比如2023.2.3 > 2023.2.2) version_tuple = tuple(map(int, version_str.lstrip('V').split('.'))) # 将末尾数字转为整数 num = int(num_str) # 排序优先级:先按末尾数字,再按版本号 return (num, version_tuple) output_path = Path("./") # 使用自定义键进行排序 for video_path in sorted(output_path.glob("*.txt"), key=custom_sort_key): print(video_path)
关键逻辑说明
- 拆分文件名:通过
split('_')把文件名拆分成三部分,提取出版本字符串(比如V2023.2.2)和末尾数字字符串(比如0)。 - 版本号处理:把版本号去掉前缀
V后拆分成数字元组,这样比较时会按数字大小排序,而不是字符串字典序(避免出现2023.10.0比2023.2.0靠后的错误)。 - 排序键设计:返回的元组
(num, version_tuple)会让排序器先按num分组(0在前,1在后),每组内再按版本号升序排列,完全匹配你要的结果。
如果后续文件名格式有调整,只需要修改custom_sort_key里的拆分和提取逻辑即可适配。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

