You need to enable JavaScript to run this app. Python适配行首空白场景批量修改pid值解决文件合并id冲突
优惠活动
大模型
产品
解决方案
定价
更多

Python适配行首空白场景批量修改pid值解决文件合并id冲突

原始脚本核心问题定位
  • 行结构拆分逻辑硬编码适配了"pid":在行首、无前置空白的场景,遇到带缩进的目标行时,split(" ")会把前置空白识别为第一个分割块,直接丢失原有格式、拆分错位
  • 数字提取逻辑存在设计缺陷:直接抓取整行所有数字拼接成整数,一旦行内存在其他数字(比如同行动态字段的数值),会把无关数字和pid拼接成错误数值
  • 格式破坏问题:修改pid行时强制在末尾追加逗号,会把原本没有末尾逗号的行强行加上不符合原始结构的标点,破坏文件可合并的兼容性
  • 文件打开模式问题:用追加模式'a'写输出,重复运行脚本时会反复向输出文件追加内容,导致文件冗余
修正实现思路
  • 完全保留原始文件的所有格式细节,包括前置缩进、末尾标点、非目标行的全部内容,不做额外修改
  • 用正则直接定位行内任意位置的"pid":字段,精准抓取该字段对应的数值,不提取其他无关内容
  • 对抓取到的pid值统一累加9000偏移,替换原位置的数值,保持字段前后的空白格式不变
  • 输出文件采用写入模式,避免重复运行造成的内容重复

可直接运行的修正后代码
import re

# 以写入模式打开输出文件,避免重复运行时内容重复堆积
with open('第二联赛_pid修正版.txt', 'w', encoding='utf-8') as output_f:
    # 读取待修改的原始第二联赛文件
    with open('test5.txt', 'r', encoding='utf-8') as input_f:
        for line in input_f:
            # 正则匹配规则:匹配任意位置的"pid": 后跟任意数量空白、连续数字的结构
            def calc_offset(match_obj):
                original_pid = int(match_obj.group(1))
                return f'"pid": {original_pid + 9000}'
            
            # 仅替换匹配到的pid内容,行内其他所有内容(包括缩进、逗号、其他字段)原样保留
            processed_line = re.sub(r'"pid":\s*(\d+)', calc_offset, line)
            output_f.write(processed_line)
适配特性说明
  • 兼容任意行首缩进:不管目标行前面有多少空格、制表符,只要行内存在"pid": 数值的结构,就能精准定位pid值,和缩进长度完全无关
  • 不破坏原有格式:原行末尾的逗号、字段间的空格、其他无关字段的内容全部原样保留,不会出现原脚本强行加逗号、丢缩进的问题
  • 数字提取精准:只抓取"pid":字段对应的数值,不会把行内其他字段的数字混入计算,彻底解决原脚本把整行数字拼接的错误
  • 兼容格式变体:自动识别pid字段后1个或多个空白间隔的场景,不需要严格匹配"pid": (单个空格)的固定格式
效果对照(基于提供的测试样例)
  • 原始行: "pid": 5, → 修正后: "pid": 9005,
  • 原始行: "pid": 3000, → 修正后: "pid": 12000,
  • 原始行: "pid": 1024(无末尾逗号)→ 修正后: "pid": 10024(不额外追加逗号,和原格式一致)
  • 原始行:"uakkdk": 585, → 修正后原样输出,无任何改动

使用提示:运行前只需要把代码里的test5.txt替换为自己的第二联赛原始文件路径,输出的第二联赛_pid修正版.txt就可以直接和第一联赛的文件合并,不会出现pid值重叠冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 18:54:03