如何将文本文件内所有数字乘以同一系数,re替换方法失效求助
文本数字批量乘系数实现方案
核心方法是使用re.sub()的回调函数特性实现动态替换,你之前直接用固定替换字符串达不到效果就是因为没有对匹配到的每个数字做单独运算。
实现步骤
- 定义匹配数字的正则规则,可覆盖正负整数、浮点数场景:
r'-?\d+\.?\d*' - 编写匹配回调函数,将匹配到的数字字符串转为数值、乘以目标系数后再转为字符串返回
- 读取文本文件内容,执行全局替换后写入结果文件
完整Python示例代码
import re # 自定义相乘系数 MULTIPLIER = 3 def calc_num(matched): raw_num = float(matched.group()) result = raw_num * MULTIPLIER # 可选:整数结果保留整数格式,避免输出x.0 return str(int(result)) if result.is_integer() else str(result) if __name__ == "__main__": # 读取源文件 with open("source.txt", "r", encoding="utf-8") as f: text = f.read() # 执行全局替换 processed_text = re.sub(r'-?\d+\.?\d*', calc_num, text) # 输出结果,可自行改为覆盖源文件 with open("result.txt", "w", encoding="utf-8") as f: f.write(processed_text)
适配调整说明
- 仅需匹配正数字时,删除正则开头的
-?即可 - 若文本中的数字带有千分位分隔符、百分号等特殊格式,可先调整正则规则匹配对应格式,提取纯数值部分计算后再还原格式
- 需要固定输出小数位数时,替换返回值为
f"{result:.2f}"这类格式化写法即可
内容的提问来源于stack exchange,提问作者Michael Wernli
相关产品推荐
相关产品推荐

