【Python】docxnote:优雅的 Word 批注

docxnote 是一个轻量级的 DOCX 批注 库,只依赖 lxml。它直接处理 WordprocessingML,把 docx 当成 ZIP + XML,对外提供 按段落字符串 操作的 API------不暴露 Word 里的 Run,批注用字符区间 start / end 标定。

如果你做过合同/标书/论文的批量审阅,多半踩过这样的坑:用通用 DOCX 库时要自己拆 Run 、对 XML 锚点、维护 comments.xml 和关系------样板代码长、边界情况多,一不留神批注就错位或损坏原文。

安装:

bash 复制代码
pip install docxnote
python 复制代码
from docxnote import DocxDocument, Paragraph, Table

with open("document.docx", "rb") as f:
    doc = DocxDocument.parse(f.read())

for block in doc.blocks():
    if isinstance(block, Paragraph) and block.text:
        block.comment("请检查表述", end=5, author="reviewer")
    elif isinstance(block, Table):
        rows, cols = block.shape()
        for r in range(rows):
            for c in range(cols):
                for inner in block[r, c].blocks():
                    if isinstance(inner, Paragraph) and inner.text:
                        inner.comment("需复核", end=3, author="reviewer")

with open("output.docx", "wb") as f:
    f.write(doc.render())

需要保留文件里已有批注时,使用 DocxDocument.parse(..., keep_comments=True)。批注在调用 render() 时写入 comments.xmlcomment() 支持可选参数 date(默认当前系统时间)。

同一 DocxDocument 可在多线程里使用;多个文档各 parse 一份再并行即可。

更多 API 说明见仓库 README(英文)与 README_zh-CN(中文)。

相关推荐
韶博雅1 天前
emcc24ai
开发语言·数据库·python
yongui478341 天前
C# 与三菱PLC通讯解决方案
开发语言·c#
2501_933329551 天前
技术架构深度解析:Infoseek舆情监测系统的全链路设计与GEO时代的技术实践
开发语言·人工智能·分布式·架构
Tong Z1 天前
常见的限流算法和实现原理
java·开发语言
凭君语未可1 天前
Java 中的实现类是什么
java·开发语言
He少年1 天前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
wearegogog1231 天前
离散系统参数辨识与广义预测控制MATLAB实现
开发语言·matlab
史迪仔01121 天前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
AI_Claude_code1 天前
ZLibrary访问困境方案四:利用Cloudflare Workers等边缘计算实现访问
javascript·人工智能·爬虫·python·网络爬虫·边缘计算·爬山算法