我已使用ElementTree包成功读取.docx
文件,使用zipfile
。但我意识到.doc
文件没有存档"word/document.xml
"。我查了一下文件,但没有找到。它是怎么读的?对于docx,我使用了:
import zipfile as zf
import xml.etree.ElementTree as ET
z = zf.ZipFile("test.docx")
doc_xml = z.open('word/document.xml')
tree = ET.parse(doc_xml)
使用上面的.doc给出:
KeyError: "There is no item named 'word/document.xml' in the archive"
我在ElementTree文档中看到了一些可阅读的内容,但那只是针对xml文件的。
doc_xml = open('yesblue.doc','r')
这个怎么办?也许类似于在python中将.doc
转换为.docx
。
编辑:.doc格式以二进制形式存储数据,不能使用XML。
经过认真的搜索,我意识到最好使用comtypes包将其从.doc
格式转换为.docx
格式。这有其自身的一系列缺点,如Windows exclusivity
和需要安装Microsoft Office。
import sys
import os
import comtypes.client
in_file = os.path.abspath('')
out_file = os.path.abspath('yesblue') #name of output file added to the current working directory
word = comtypes.client.CreateObject('Word.Application')
doc = word.Documents.Open('yesblue.doc') #name of input file
doc.SaveAs(out_file, FileFormat=16) # output file format to Office word Xml default (code=16)
doc.Close()
word.Quit()
代码列表包含在此处。
输出的docx
文件可用于ElementTree中的进一步处理。