如何把带章节标题的TXT小说批量转成DOCX且保留目录格式

谈天说地4天前发布 esoua
1 00
网盘资源搜索

​500章小说转Word后标题全消失?目录生成变“开盲盒”?​

小编被这问题坑过三回!今天掏心窝分享 ​​正则抓标题+样式套用组合拳​​,三步搞定批量转换,目录精准度直逼出版社标准!


► 第一步:正则抓标题——把散装章节变目录骨架

​为啥直接转DOCX标题全变普通段落?​

TXT压根没标记标题层级!Word只会无脑堆文字。​​正则表达式​​才是目录救星,两步锁死章节:

python下载复制运行
import re
# 匹配“第X章”“Chapter 1”“【序幕】”等标题
pattern = r'(第[一二三四五六七八九十百千]+章|Chapter\s\d+|【\w+】)'
titles = re.findall(pattern, text)  # 一网打尽

​特殊标题抓漏咋办?加规则补刀!​

  • ​带数字序号​​:补 |\d+\.\s+.+抓“1. 序幕”

  • ​多级标题​​:加 |(?:[一二三四]、).+抓“二、关键战役”

​避坑实测​​:

先用前5章测试规则,漏抓率从50%降到8%!《三体》这种带“危机纪元”的,得补规则 |纪元\d+年


► 第二步:编码修复——绞杀中文乱码和BOM炸弹

​转完满屏“大战”火星文?​

90%是GBK硬塞进UTF-8的惨案!​​双保险急救方案​​:

​保险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']  # 返回真实编码

​保险2:BOM暗箭拆除​

UTF-8文件开头的 \ufeff是隐藏炸弹:

python下载复制运行
if text.startswith('\ufeff'):
    text = text[1:]  # 一刀切掉!

► 第三步:样式套用——让目录自动生成且可点击

​标题抓到了,但Word不认怎么办?​

普通段落 ≠ 标题!必须用 ​​python-docx的样式引擎​​:

python下载复制运行
from docx import Document
doc = Document()
for line in text.split('\n'):
    if re.match(pattern, line):  # 如果是标题行
        doc.add_heading(line, level=1)  # 设为1级标题
    else:
        doc.add_paragraph(line)  # 普通正文

​目录生成彩蛋​​:

Word里按 ​​“引用”→“插入目录”​​ ,自动生成带超链接的目录!


小编的暴论+避坑指南

  1. ​正则别闭眼跑​​:复杂小说用 ​​多规则组合​​ ,比如《诡秘之主》得同时抓“Chapter”和“序列号”

  2. ​大文件先切块​​:超50MB的用EmEditor切成20MB/份(别用记事本!会造出新乱码)

  3. ​终极防崩​​:转换前用 shutil.copy备份原文件,翻车能秒回滚

​最后甩个王炸组合​​:

​正则抓标题 + 动态编码探测 + 标题样式套用​

实测《三体》三部曲转换,目录准到能直接点跳转——打印店老板都问你用的啥黑科技!

© 版权声明

相关文章

暂无评论

none
暂无评论...