【发布时间】:2018-08-21 06:51:13
【问题描述】:
我只关心从 .doc 文件中获取文本。我在 Windows 10 上使用 python 3.6,所以 textract/antiword 不在讨论范围内。我查看了来自 this question 的其他参考资料,但它们都很旧并且与 Windows 10 和/或 python 3.6 不兼容。
我的文档是一个中英文混合的 .doc 文件。我不熟悉 Word 如何存储其文件,而且我的机器上没有 Word。使用 olefile 我能够获取文档的字节,但我不知道如何正确遍历标题和布局以提取文本。如果我天真地尝试
from olefile import OleFileIO as ofio
ole = ofio('d.doc')
stream = ole.openstream('WordDocument')
data = stream.read()
data.decode('utf-16')
>>>UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 9884-9885: illegal encoding
data[9884:9885]
>>>b'\xfa'
data[:9884].decode('utf-16')
然后最后一行给了我大约一半的文档,以很多垃圾字符开始和结束。我怀疑我可以继续尝试这种方法来逐个获取文本,但我最终需要对很多文件执行此操作。即使我这样做了,我也想不出一个自动化的好方法。如何使用 olefile 从 .doc 可靠地获取文本?
(如果您知道适用于我的规格的替代方案,也可以在您的答案中包含 olefile 的替代方案)
【问题讨论】:
-
wiki.openoffice.org/wiki/PyUNO_samples 可能会有所帮助,如果您可以安装 LibreOffice
-
您遇到的问题是 *.doc 文件是旧的专有二进制文件格式,这意味着内容已编码。没有直接的方法可以从此类文件中提取文本。