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

Python regex sub方法下while循环内变量自增后Excel替换异常问题

问题根因
  • 你全程在同一个内存中的工作簿wb和工作表ws对象上做修改:第一次循环已经把指定范围内所有符合规则的两位数字替换成了1位的1,后续循环的正则规则\d\d(?=\*)仅匹配两位数字,已经找不到可匹配的内容,因此后续所有替换操作都不会生效
  • 你每次循环仅做了保存文件的操作,没有重新加载原始的Excel文件作为修改基底,所有修改都是在第一次替换后的结果上叠加,自然所有文件的替换值都是第一次的1
修复方案

每次进入while循环时,都重新从原始Excel文件加载工作簿和工作表对象,保证每次替换都是基于原始内容执行的,不会受上一次循环修改的影响。

修复后代码
import re
from openpyxl import load_workbook

# 替换为你自己的原始Excel文件路径
ORIGIN_FILE = "你的原始文件.xlsx"

i = 1
while i < 5:
    a = i
    # 每次循环重新加载原始文件,保证修改基底一致
    wb = load_workbook(ORIGIN_FILE)
    # 替换为你实际要操作的工作表名称
    ws = wb["Sheet1"]
    for row in ws.iter_rows(min_row=18, min_col=2, max_col=91, max_row=41):
        for cell in row:
            cv = cell.value
            if not cv:
                continue
            formula_regex = re.compile(r'\d\d(?=\*)') 
            formula = formula_regex.sub(f"{a}", str(cv)) 
            cell.value = formula
    filename = f'sw_file_{a}.xlsx'
    wb.save(filename)
    i += 1
额外优化建议
  • 正则表达式的编译可以放到循环外,不需要每次循环都重复生成正则对象,提升执行效率
  • 增加空单元格判断,避免遇到空值时报错
  • 把原始文件路径、工作表名称提取为变量,后续修改更方便

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:09:03