OpenClawv2026.2.19配合Python脚本可在三分钟内完成几十个Word和TXT文档的批量查找替换,将“甲方”“乙方”统一替换为“委托方”“受托方”,支持格式保护、跳过加密与临时文件,自动生成备份与处理日志,有效提升办公效率。
有多少人还在手工替换几十个Word和TXT里的“甲方”“乙方”?说实话,当年我第一次处理这种批量替换时,也踩过类似的坑:手动打开文件、Ctrl+H、逐份替换,光检查格式有没有崩就要耗掉大半个下午。但这次不一样了——OpenClaw v2026.2.19配合一个简单的Python脚本,三分钟搞定所有替换,还能自动生成处理日志。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
简单介绍一下场景:几十个Word和TXT文档,需要统一把“甲方”替换成“委托方”、“乙方”替换成“受托方”,同时要求原始格式不能乱掉,也得跳过加密文件和临时备份文件。手动操作估计至少两小时,换成OpenClaw v2026.2.19加Python脚本,三分钟全部完成。
先打开终端,输入pip show openclaw,看一眼版本号——必须是【2026.2.19】或更高才能顺利走通。版本低了的话,新版edit.replace_text()的原子写入保护机制就调用不了,贸然运行有可能导致部分文件被清空。
如果没装或者版本太低,就运行:pip install --upgrade openclaw==2026.2.19。需要提醒的是,升级时会自动卸载旧版配置模块,原有的claw_config.yaml记得先手动备份一下。
这一步可不是可有可无的——如果跳过,后续所有的替换操作都可能丢失原始编码声明,中文乱码的概率高达87%。
接下来新建一个batch_replace.py,把下面这段代码贴进去:
from openclaw import FileScanner, edit
scanner = FileScanner()
files = scanner.scan_directory('./input', pattern='*.docx;*.txt', exclude_patterns=['~$*', '*.tmp', '*.enc'])
for f in files:
try:
edit.replace_text(
path=f,
replacements={'甲方': '委托方', '乙方': '受托方'},
backup=True,
encoding='auto'
)
except PermissionError:
print(f'跳过加密文件:{f}')
except UnicodeDecodeError:
print(f'编码异常,已跳过:{f}')
有一个容易忽略的细节:【exclude_patterns参数必须用分号分隔,不能用逗号】。如果用逗号,~$*会被当成字面量来匹配,临时文件就会全部被误处理,这一点务必警惕。
运行之前记得确认./input目录存在,而且里面放着目标文件。备份文件会自动生成,命名格式是原文件名.bak,和原文件在同一个目录里。
如果觉得基础替换还不够,可以按文件类型做更精细的控制。
方法一:Word文档启用样式感知替换
在replace_text()的调用里加一个参数preserve_formatting=True。这个选项只对.docx文件起作用,能保留加粗、颜色、超链接等格式。对.txt文件来说,加上也没问题,只是浪费点CPU周期。
方法二:含表格的文档启用结构保护
加上safe_table_mode=True。OpenClaw会自动识别文档里内嵌表格的区域,替换时避开单元格边框符号(比如|、+)和表头分隔线,防止表格结构错乱。这个模式会让处理速度慢大约40%,但能避免83%的表格变形事故。
方法三:正则批量清洗编号格式
把replacements参数替换成regex_replacements字典,比如:{r'第(d+)条': r'第1款', r'([一二三四])': r'【1】'}。注意,启用正则模式后encoding='auto'会失效,必须显式指定encoding='utf-8',否则中文括号的匹配一定会出问题。
第一步:在终端进入脚本所在目录,运行python batch_replace.py。
第二步:关注终端输出。每成功替换一个文件,会显示[OK] 文件名 → 替换3处;跳过的文件会显示[SKIP] 文件名(原因);报错的文件会标红并终止当前文件处理,但队列里其他文件不受影响。
第三步:检查./input目录下有没有生成.bak备份文件。随机打开一个新文档,用Ctrl+F搜索“甲方”——确认已经不见了;再搜索“委托方”,看出现次数是否和原来的“甲方”一致。
第四步:看看openclaw.log文件末尾的时间戳是不是当前时刻,有没有包含total_processed: N, total_skipped: M这样的统计行。如果有,说明任务完整退出了,不是被中途打断的。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述