【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(中文)。

相关推荐
念恒1230612 小时前
Python(列表进阶)
python·学习
AI人工智能+电脑小能手12 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
geovindu12 小时前
go: Strategy Pattern
开发语言·设计模式·golang·策略模式
276695829212 小时前
阿里最新acw_sc__v2 分析
开发语言·python·acw_sc__v2·acw_sc__v2逆向·acw_sc__v2算法·acw_sc__v2算法分析·cookie逆向
dog25012 小时前
圆锥曲线和二次曲线
开发语言·网络·人工智能·算法·php
AI人工智能+电脑小能手12 小时前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试
开发小程序的之朴12 小时前
基于Go语言的企业级CMS系统架构设计与性能分析——以AnQiCMS为例
开发语言·golang·系统架构
vortex513 小时前
python 库劫持:原理、利用与防御
python·网络安全·提权
叶小鸡13 小时前
Java 篇-项目实战-天机学堂(从0到1)-day9
java·开发语言
小短腿的代码世界13 小时前
Qt券商接口封装深度解析:统一API设计与多源适配
开发语言·qt·单元测试