Python文本替换:迭代修改SDL文件中指定位置数值
解决方案
核心思路
用正则表达式精准定位目标数值对,结合随机数生成逻辑,循环6次完成迭代修改。
步骤实现
- 导入依赖模块
import re import random
- 定义随机数值对生成函数
可根据需求调整随机数范围,示例生成前小后大的整数对(支持负数):
def generate_random_pair(): # 生成两个随机整数,允许负数,确保前数小于后数 num1 = random.randint(-15, 15) num2 = random.randint(num1 + 1, num1 + 20) return f"{num1} to {num2}"
- 循环迭代修改文件
每次基于原始文件内容修改,避免多次迭代后出现错误替换:
# 读取原始文件内容 with open('test.sdl', 'r', encoding='utf-8') as f: original_content = f.read() # 执行6轮迭代 for round_num in range(6): new_pair = generate_random_pair() # 正则精准匹配第二个[]内的第一个数值对 # 反向预查匹配"[-, ",正向预查匹配", ",确保只替换目标位置 updated_content = re.sub(r'(?<=\[-, )(-?\d+ to -?\d+)(?=, )', new_pair, original_content) # 按迭代序号保存新文件,避免覆盖原文件 with open(f'test_round_{round_num+1}.sdl', 'w', encoding='utf-8') as f: f.write(updated_content) print(f"第{round_num+1}轮完成,已生成test_round_{round_num+1}.sdl")
关键说明
- 正则表达式
(?<=\[-, )(-?\d+ to -?\d+)(?=, ):(?<=\[-, ):反向预查,确保匹配内容前是[-,(-?\d+ to -?\d+):匹配带负号的数值对(-?表示可选负号)(?=, ):正向预查,确保匹配内容后是,
- 如果需要直接覆盖原文件,把写入的文件名改成
test.sdl即可,但建议保留原始文件,按迭代生成新文件更安全。
内容的提问来源于stack exchange,提问作者user19640240
相关产品推荐
相关产品推荐

