Python实现按前缀将文件名数组拆分为多个子数组
Python实现按文件名前缀分组的简洁方案
这需求在批量处理文件时太常见了,我给你分享几个实用又简洁的Python实现方案,覆盖不同场景:
方法一:用itertools.groupby(最简洁,适合有序数组)
如果你的文件名数组已经是按前缀连续排列的,直接用itertools.groupby就能一步搞定:
from itertools import groupby files = ['001_1.png', '001_2.png', '001_3.png', '002_1.png','002_2.png', '003_1.png', '003_2.png', '003_3.png', '003_4.png'] # 按下划线分割提取前缀作为分组依据 grouped_files = [list(group) for _, group in groupby(files, key=lambda f: f.split('_')[0])] print(grouped_files)
注意点:
groupby只会对连续的相同键分组,如果你的数组里前缀是乱序的(比如穿插着001和002的文件),记得先给数组排序:files.sort(),这样同一前缀的文件会集中在一起,分组结果才正确。- 如果前缀是固定长度的(比如都是3位数字),可以用切片代替split,效率更高:
key=lambda f: f[:3]
方法二:用字典分组(无需排序,适用性更广)
如果不想依赖数组的顺序,用字典来分组是更稳妥的选择,不管原数组怎么排列都能正确分组:
files = ['001_1.png', '001_2.png', '001_3.png', '002_1.png','002_2.png', '003_1.png', '003_2.png', '003_3.png', '003_4.png'] group_dict = {} for file in files: prefix = file.split('_')[0] # 前缀不存在时自动创建空列表,然后追加文件 group_dict.setdefault(prefix, []).append(file) # 把字典的值转换成嵌套数组就是最终结果 grouped_files = list(group_dict.values()) print(grouped_files)
这个方法的好处是不需要提前排序,分组后的顺序是前缀第一次出现的顺序,非常灵活。
内容的提问来源于stack exchange,提问作者eric2323223
相关产品推荐
相关产品推荐

