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

Python批量修改文本文件中指定行特定字段的末尾7位字符

批量修改文本文件中指定字段内容

问题场景

我有数千个文本文件,每个文件结构类似示例:

Type Basemap 20221118202211
QSNGAGL1 20221120209912300111111 1B Bus O
QO1290BOB203871145 T1
QI1290BOA0587611451145B T1
QI1290BOB2044911451145B T1
QI1200BOB2014411451145B T1
QI1200BOB2014611451145B T1
QT1200DOY385621145 T1
QSNGAGL2 20221120209912300100110 1B Bus O
QO1290BOB203871145 T1
QI1290BOA0587611451145B T1
QI1200DOY2932411451145B T1
QI1200DOA2517511451145B T1
QT1200DOY385621145 T1
QSNFB 1 20221009209912300101100 1 Bus O
QO1290BOB203871115 T1
QI1290BOA0587611151115B T1
QI1290BOB2044911151115B T1
#(and so on... for ~60,000 rows per file...)

文件特点:

  • 首行为唯一表头
  • 数据行间距不固定
  • 以QS开头的行之间的非QS行数量不固定
  • 部分文件55000行后存在文本溢出到行右侧的情况

需求:

  1. 遍历所有目标文件
  2. 找出所有以QS开头的行
  3. 定位该行第二个字段(以2022开头的数字串,末尾7位是1/0组合)
  4. 将该字段最后7位替换为1111100
  5. 保存为前缀fixed_的新文件,不覆盖原文件

此前尝试用pandas无法正确读取数据,简单查找替换也不可行(末尾7位组合不固定)。

解决方案

用Python编写脚本逐行处理文本,避免解析错误:

import os
import re

# 替换为你的目标文件夹路径
target_dir = "./your_files_directory"
# 固定替换的后缀字符串
replace_suffix = "1111100"

def process_single_file(file_path):
    # 生成带fixed_前缀的新文件路径
    file_name = os.path.basename(file_path)
    new_file_path = os.path.join(os.path.dirname(file_path), f"fixed_{file_name}")
    
    with open(file_path, 'r', encoding='utf-8') as infile, open(new_file_path, 'w', encoding='utf-8') as outfile:
        for line in infile:
            # 处理以QS开头的行
            if line.strip().startswith('QS'):
                # 正则匹配:QS开头的内容 + 第二个数字字段 + 后续内容
                def replace_target_field(match):
                    original_num = match.group(2)
                    # 替换最后7位,确保字段长度足够
                    if len(original_num) >= 7:
                        new_num = original_num[:-7] + replace_suffix
                    else:
                        new_num = original_num
                    return f"{match.group(1)}{new_num}{match.group(3)}"
                line = re.sub(r'(QS\S+\s+)(\d+)(\s+.+)', replace_target_field, line)
            # 写入处理后的行
            outfile.write(line)

# 遍历目标文件夹下所有文件
for root, _, files in os.walk(target_dir):
    for file in files:
        # 可添加过滤条件,比如只处理.txt文件:if file.endswith('.txt')
        full_path = os.path.join(root, file)
        process_single_file(full_path)
        print(f"处理完成:{full_path} -> fixed_{file}")

脚本说明

  • 逐行处理模式,避免大文件占用过多内存
  • 用正则精准匹配目标字段,保留原行的空格格式,适配间距不一致的问题
  • 自动遍历文件夹下所有文件,生成新文件时不会覆盖原文件
  • 兼容行尾文本溢出的情况,不受行长度限制

使用注意

  1. 替换target_dir为你的实际文件路径
  2. 若只需处理特定后缀文件,取消注释并修改if file.endswith('.txt')的后缀条件
  3. 先测试少量文件,确认结果符合预期后再批量处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:16:23