如何使用Python 3.x整理文本文件中的图片文件名
解决文件名重新排序的Python实现方案
这需求其实很清晰:就是把原本按前缀分组的文件名,改成按末尾的数字序号分组排序,同时保持同序号下前缀的原有顺序(A0→A1→B0→B1)。下面给你两种实用的Python 3.x实现方法:
方法一:基于字符串拆分的简洁实现
这种方法适合文件名格式固定的场景,直接通过字符串拆分提取排序关键字:
# 原始输入字符串 input_str = "IMAGE_[A0]_00001.jpg IMAGE_[A0]_00002.jpg IMAGE_[A1]_00001.jpg IMAGE_[A1]_00002.jpg IMAGE_[B0]_00001.jpg IMAGE_[B0]_00002.jpg IMAGE_[B1]_00001.jpg IMAGE_[B1]_00002.jpg" # 将字符串拆分为单个文件名的列表 file_list = input_str.split() # 自定义排序规则:先按末尾数字排序,再按前缀标识排序 sorted_files = sorted( file_list, key=lambda fname: ( fname.split('_')[2].split('.')[0], # 提取数字部分(如00001) fname.split('_')[1] # 提取前缀标识(如[A0]) ) ) # 将排序后的列表重新拼接为字符串 result = ' '.join(sorted_files) print(result)
代码说明:
split()方法把输入字符串按空格拆分成独立的文件名;- 排序时,先以数字部分作为第一关键字(保证00001的文件都排在00002前面),再以前缀标识作为第二关键字(保证同数字下A0→A1→B0→B1的顺序);
- 最后用
join()把排序后的列表重新拼成空格分隔的字符串。
方法二:基于正则表达式的健壮实现
如果文件名格式可能有变化(比如数字长度不同、前缀格式微调),用正则表达式提取关键字会更可靠:
import re # 原始输入字符串 input_str = "IMAGE_[A0]_00001.jpg IMAGE_[A0]_00002.jpg IMAGE_[A1]_00001.jpg IMAGE_[A1]_00002.jpg IMAGE_[B0]_00001.jpg IMAGE_[B0]_00002.jpg IMAGE_[B1]_00001.jpg IMAGE_[B1]_00002.jpg" file_list = input_str.split() # 定义提取排序关键字的函数 def get_sort_key(fname): # 匹配并提取.jpg前的数字部分 num_match = re.search(r'_(\d+)\.jpg', fname) # 匹配并提取IMAGE_和_之间的前缀标识 prefix_match = re.search(r'IMAGE_(\[.*?\])_', fname) return (num_match.group(1), prefix_match.group(1)) # 按自定义关键字排序 sorted_files = sorted(file_list, key=get_sort_key) result = ' '.join(sorted_files) print(result)
代码说明:
- 用正则表达式精准匹配数字和前缀部分,避免了字符串拆分可能带来的格式兼容性问题;
- 即使文件名的数字长度从5位变成6位,或者前缀格式有小调整,只要核心结构不变,代码依然能正常工作。
两种方法运行后,都会输出你需要的结果:
IMAGE_[A0]00001.jpg IMAGE[A1]00001.jpg IMAGE[B0]00001.jpg IMAGE[B1]00001.jpg IMAGE[A0]00002.jpg IMAGE[A1]00002.jpg IMAGE[B0]00002.jpg IMAGE[B1]_00002.jpg
内容的提问来源于stack exchange,提问作者Lewis Boxer
相关产品推荐
相关产品推荐

