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

修改TXT文件数值时结果不符预期的技术求助

问题排查与解决方案

问题原因

  • 正则匹配失效:你使用的^1、^2等正则是匹配行首直接为对应数字的行,但原文件中每行数字前有空格,导致这些正则无法匹配到目标数字。反而在后续操作中,错误匹配到10中的1,引发替换异常。
  • 替换值提前固化:str(number())会在执行re.sub前就调用number()生成固定字符串,而非每次匹配时动态生成递增数值。连续10次调用number()直接将num从9累加到19,导致最终替换值异常。
  • 替换顺序冲突:先替换单个数字再替换10,会把10中的1提前替换,比如最后替换1时用了19,导致10变成190。

解决方案

方案1:正则+动态回调函数(简洁高效)

用正则匹配1-10的完整数字,将递增函数作为替换回调,每次匹配时动态生成新值:

import re

filename = "myfile.txt"

num = 9
def number(match):
    global num
    num += 1
    return str(num)

with open(filename, "r") as f:
    contents = f.read()

# 匹配1-10的完整数字,避免匹配数字片段
contents = re.sub(r'\b(10|[1-9])\b', number, contents)

with open(filename, "w") as f:
    f.write(contents)

方案2:逐行处理(直观易调试)

直接读取每行内容,提取数字后加9(1→10、10→19均为加9),保留原格式:

filename = "myfile.txt"

processed_lines = []
with open(filename, "r") as f:
    for line in f:
        raw_num = line.strip()
        if raw_num.isdigit():
            new_num = int(raw_num) + 9
            # 替换行内的原数字,保留前导空格
            processed_line = line.replace(raw_num, str(new_num))
            processed_lines.append(processed_line)

with open(filename, "w") as f:
    f.writelines(processed_lines)

验证结果

两种方案执行后,文件内容均符合期望:

10
 11
 12
 13
 14
 15
 16
 17
 18
 19

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:33:10