You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何按指定前缀匹配将文件名列表拆分为分组子列表

Python文件名按前缀分组实现方案

核心思路

所有需要匹配的前缀均为_col字段之前的字符串片段,直接以此作为分组key即可。

方案1:基于itertools.groupby的极简实现

仅需3行核心代码,无冗余逻辑:

from itertools import groupby

names = ['REGION_5_64_5_col1_row1_B1.tiff', 'REGION_5_64_5_col2_row2_B1.tiff',
'REGION_5_1_2_col_row_B1.tiff','REGION_5_8_3_col_row_B1.tiff']

# 分组逻辑
key_fn = lambda x: x.split('_col')[0]
result = [list(g) for _, g in groupby(sorted(names, key=key_fn), key=key_fn)]
  • 如果原始列表中相同前缀的文件名已经连续排列,可去掉sorted步骤,直接改为groupby(names, key=key_fn),性能更高。

方案2:基于defaultdict的高性能实现

仅遍历列表1次,时间复杂度O(n),适合大列表场景:

from collections import defaultdict

names = ['REGION_5_64_5_col1_row1_B1.tiff', 'REGION_5_64_5_col2_row2_B1.tiff',
'REGION_5_1_2_col_row_B1.tiff','REGION_5_8_3_col_row_B1.tiff']

# 分组逻辑
group_map = defaultdict(list)
for name in names:
    group_map[name.split('_col')[0]].append(name)
result = list(group_map.values())

两种方案运行后result的输出均符合要求:

[
    ['REGION_5_64_5_col1_row1_B1.tiff', 'REGION_5_64_5_col2_row2_B1.tiff'],
    ['REGION_5_1_2_col_row_B1.tiff'],
    ['REGION_5_8_3_col_row_B1.tiff']
]

内容的提问来源于stack exchange,提问作者user1298426

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:12:03