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

按指定规则分组批量顺序读取多份TXT文件的实现问题

解决方案

核心修正点

  • 修正分组键生成逻辑:原代码选取的字段索引错误,新逻辑过滤MT后缀位,仅其余字段完全匹配的文件才会归为同一组
  • 适配百万级文件场景:使用os.scandir替代glob,迭代读取文件不会一次性加载全量文件名到内存,内存占用更低、读取速度更快
  • 增加分组完整性校验:仅处理凑齐R/S/T三个文件的完整分组,避免缺文件导致的业务异常

可运行代码

import os
from collections import defaultdict

def group_files(file_dir: str = "."):
    file_groups = defaultdict(list)
    # 迭代读取目录下的文件,适配百万级规模的内存开销
    for entry in os.scandir(file_dir):
        # 只过滤符合规则的txt文件
        if not entry.is_file() or not entry.name.endswith(".txt"):
            continue
        parts = entry.name.split(".")
        # 跳过格式不符合命名规则的异常文件
        if len(parts) != 8:
            continue
        # 生成分组唯一键:排除第3位的MT[R/S/T]字段,其余字段拼接作为标识
        group_key = ".".join([parts[0], parts[1], parts[2], parts[4], parts[5], parts[6]])
        file_groups[group_key].append(entry.path)
    # 仅返回凑齐3个文件的完整分组
    for group in file_groups.values():
        if len(group) == 3:
            yield group

if __name__ == "__main__":
    # 每次遍历拿到的就是同组的3个文件,直接处理即可
    for file_group in group_files("."):
        print("当前处理分组文件:")
        for file in file_group:
            print(file)
        # 此处替换为你的业务处理逻辑,入参为同组3个文件的路径列表
        # your_business_process(file_group)

效果验证

运行上述代码对示例文件做处理,输出的分组完全符合需求:
第一组:

IU.WRT.00.MTR.1999.081.081015.txt
IU.WRT.00.MTS.1999.081.081015.txt
IU.WRT.00.MTT.1999.081.081015.txt

第二组:

IU.WRT.00.MTS.2007.229.022240.txt
IU.WRT.00.MTR.2007.229.022240.txt
IU.WRT.00.MTT.2007.229.022240.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:12:01