python读取Word的docx格式的正文

一、微软Word历史、背景及进化:

我不喜欢微软的 Word 软件。并不是因为它是一款烂软件,而且因为它的用户误用了它(好像 Linus Torvalds 对 C++ 的吐槽)。Word 的特异功能就是把那些应该写成简单的 TXT 或 PDF 格式的文件,变成了既大又慢且难以打开的怪兽,它们经常在系统切换和版本切换中出现格式不兼容,而且因为某些原因在文件内容已经定稿后仍处于可编辑的状态。Word 文件从未打算让人频繁传递。不过它们在一些网站上很流行,包括重要的文档、信息,甚至图表和多媒体;总之,那些内容都应该用 HTML代替。

大约在 2008 年以前,微软 Office 产品中 Word 用 .doc 文件格式。这种二进制格式很难读
取,而且能够读取 word 格式的软件很少。为了跟上时代,让自己的软件能够符合主流软
件的标准,微软决定使用 Open Office 的类 XML 格式标准,此后新版 Word 文件才与其他
文字处理软件兼容,这个格式就是 .docx。
不 过,Python 对 这 种 Google Docs、Open Office 和 Microsoft Office 都 在 使 用 的 .docx 格
式 的 支 持 还 不 够 好。 虽 然 有 一 个 python-docx 库,但是只支持创建新文档和读取一些基本的文件数据,如文件大小和文件标题,不支持正文读取。如果想读取 Microsoft Office 文件的正文内容,我们需要自己动手找方法。

二、第一步是从文件读取 XML:

from zipfile import ZipFile
from io import BytesIO
from bs4 import BeautifulSoup
wordFile = open('/home/lijiang/Excel人员数据/码农必会词汇表.docx', 'rb').read()
wordFile = BytesIO(wordFile)
document = ZipFile(wordFile)
xml_content = document.read('word/document.xml')
print(xml_content.decode('utf-8'))

这 段 代 码 把 一 个Word 文 档 读 成 一 个 二 进 制 文 件 对 象( BytesIO 与 StringIO 类似),再用 Python 的标准库 zipfile 解压(所有的 .docx 文件为了节省空间都进行过压缩),然后读取这个解压文件,就变成 XML 了。

三、用BeautifulSoup做进一步处理:

文档的所有正文内容都包含在 <w:t>标签里面,标题内容也是如此,这样就容易处理了。

from zipfile import ZipFile
from io import BytesIO
from bs4 import BeautifulSoup

wordFile = open('/home/lijiang/Excel人员数据/码农必会词汇表.docx', 'rb').read()
wordFile = BytesIO(wordFile)
document = ZipFile(wordFile)
xml_content = document.read('word/document.xml')
wordObj = BeautifulSoup(xml_content.decode('utf-8'), features="lxml")
textStr = wordObj.findAll('w:t')

for textElem in textStr:
print(textElem.text)

这段代码的结果并不完美,但是已经差不多了,一行打印一个 <w:t> 标签。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_64880493_江哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值