500份TXT转DOCX,手动操作到天亮?
转完发现标题全失踪、中文变“火星文”?
小编用血泪经验告诉你——批量转换的坑,90%栽在 “标题识别” 和 “编码炸弹” 上!今天手拆两座大山,教你用 正则+编码修复组合拳 10分钟自动化搞定!
► 第一板斧:正则抓标题,专治章节失踪
为啥直接转DOCX标题全消失?
TXT压根没目录结构!Word只会把文字堆成山。Python正则表达式 才是救星,3步抓准标题:
python下载复制运行import re # 匹配中文/英文/带符号标题 pattern = r'(第[一二三四五六七八九十百千]+章|Chapter\s\d+|【\w+】)' titles = re.findall(pattern, text) # 一网打尽所有标题
特殊标题怎么抓? 补两条规则防漏网:
带空格标题:加
|\d+\.\s+.+
抓 “1. 开端”多级标题:补
|(?:[一二三四]、).+
抓 “二、重要事件”避坑实测:
先拿前3章测试规则,漏抓率直降80%
复杂小说用 多模式组合,比如《三体》的“危机纪元”得补
|纪元\d+年
► 第二板斧:批量转码术,绞杀UTF8乱码
转换后中文变“å笔乱码?
文件编码打架了!GBK硬塞进UTF8必崩盘。双保险修复方案:
保险1:编码探测+强制纠正
用
chardet
自动检测编码,专治GBK/GB18030乱码:python下载复制运行import chardet # 探测原始编码 with open('novel.txt', 'rb') as f: raw_data = f.read(10000) # 读前1万字节足够 encoding = chardet.detect(raw_data)['encoding'] # 返回GBK/UTF8等 # 按真实编码读取 with open('novel.txt', 'r', encoding=encoding, errors='replace') as f: text = f.read()
保险2:BOM炸弹拆除
UTF8文件开头的
\ufeff
是隐藏炸弹,必须拆除:python下载复制运行if text.startswith('\ufeff'): text = text[1:] # 一刀切掉BOM头
► 第三板斧:DOCX输出优化,排版不塌方
转完段落挤成团?空格乱飞?
TXT的换行符在Word里会造反!三招锁死完美排版:
段落分割符替换:把
\n\n
换成Word认识的段落标记python下载复制运行clean_text = re.sub(r'\n{2,}', '', text) # 双换行变分段
多余空格清理:连续空格缩成1个
python下载复制运行clean_text = re.sub(r'[ ]{2,}', ' ', clean_text)
样式批量套用:用
python-docx
给标题刷样式python下载复制运行from docx import Document doc = Document() for line in clean_text.split(''): if '第一章' in line: doc.add_heading(line, level=1) # 标题刷一级样式 else: doc.add_paragraph(line) # 正文用普通段落
小编的暴论+避坑指南
正则翻车?乱码阴魂不散?记住三条铁律:
测试!测试!测试! 正则规则先在 Regex101跑通再上生产
备份大于天:转换前用
shutil.copy
自动备份原文件大文件切割:超50MB的TXT先用EmEditor切20MB/份(别用记事本!会制造新乱码)
终极彩蛋:遇到“锟斤拷”别慌!上 ftfy库 一键修复:
python下载复制运行# 安装:pip install ftfy from ftfy import fix_text hell_text = "大å®å®æé¢å¯åæ" human_text = fix_text(hell_text) # 输出“大安岭领土归我”
最后说句掏心话:批量转换的核心不是代码多牛,而是 “先验证再量产” ——用好这招,下班比别人早3小时!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...