注意:该作者博客已迁移至https://buxianshan.xyz
使用Python-docx库可以很方便的处理docx文件(官方文档)
但是有些隐含的信息Python-docx库好像无法读取,比如docx文档里的批注
下面介绍一种用python获取docx文档批注的方法
首先区分doc文件和docx文件
以前Office产品中Word用.doc文件格式,这种二进制格式很难与其他软件兼容 。docx是Microsoft Office2007之后版本使用的,用新的基于XML的压缩文件格式取代了以前默认文件格式,在传统的文件名扩展名后面添加了字母“x”(即“.docx”取代“.doc”、“.xlsx”取代“.xls”、“.pptx”取代“.ppt”)。
docx格式的文件本质上是一个ZIP文件。将一个docx文件的后缀改为ZIP后是可以用解压工具打开或是解压的。事实上,Word2007的基本文件就是ZIP格式的,他可以算作是docx文件的容器。
比如有一个test.docx文件
内容如下(包含两个批注)
把它后缀名改为.zip
解压test.zip
打开解压后的文件,可以看到原docx文件被分成了好多xml文件
原docx文件的信息都包含在这些xml文件中,比如正文包含在word/document.xml中
通过查找发现批注被保存在了word/comments.xml
如此,我们便可以很方便的用python获取批注
- 首先解压docx文件
- 然后用BeautifulSoup解析word/comments.xml提取批注信息
代码如下:
from zipfile import ZipFile
from bs4 import BeautifulSoup
document = ZipFile('test.docx')
xml = document.read("word/comments.xml")
wordObj = BeautifulSoup(xml.decode("utf-8"), features="html.parser")
texts = wordObj.findAll("w:t")
for text in texts:
print(text.text)
输出:
(同理也可以提取其它信息)
参考:
- https://blog.csdn.net/qq_20183489/article/details/76736089
- https://baike.baidu.com/item/docx/6517348?fr=aladdin