使用 zipfile 库解压缩 .docx 文件

Unzipping a .docx file using zipfile library

我正在尝试编写一个应用程序,从 word docx 文件中的 table 获取信息,以便通过将其转换为 pandas DataFrame 对其进行一些分析。第一步是正确阅读 docx 文件,为此,我遵循 Virantha Ekanayake 的 Reading and writing Microsoft Word docx files with Python.

指南

我正处于第一步,他们说要使用 zipfile 库的 Zipfile 方法将 docx 文件解压缩到 xml 文件中。我将指南中的函数定义改编为我的代码(下面包含的代码),但是当我 运行 我的代码时,我收到一条错误消息,指出 docx 文件“不是 zip 文件”。

指南中的这个人说,“本质上,docx 文件只是一个 zip 文件(尝试 运行 解压它!)……”我试过将 docx 文件重命名为zip 文件,并使用 WinZip 成功解压缩。但是,在我的程序中,我希望能够解压缩 docx 文件,而不必手动 将其重命名为 .zip 文件。我能以某种方式解压缩 docx 文件而不重命名它吗? ,如果我必须重命名它才能使用Zipfile方法,我该如何在我的python代码?

import zipfile
from lxml import etree
import pandas as pd

FILE_PATH = 'C:/Users/user/Documents/Python Project'

class Application():
    def __init__(self):
        #debug print('Initialized!')
        xml_content = self.get_word_xml(f'{FILE_PATH}/DocxFile.docx') 
        xml_tree = self.get_xml_tree(xml_content)

    def get_word_xml(self, docx_filename):
        with open(docx_filename) as f:
            zip = zipfile.ZipFile(f)
            xml_content = zip.read('word/document.xml')
        return xml_content

    def get_xml_tree(self, xml_string):
        return (etree.fromstring(xml_string))

a = Application()
a.mainloop()

错误:

Traceback (most recent call last):
File "C:\Users\user\Documents\New_Tool.py", line 39, in <module>
a = Application()
File "C:\Users\user\Documents\New_Tool.py", line 27, in __init__
xml_content = self.get_word_xml(f'{FILE_PATH}/DocxFile.docx')
File "C:\Users\user\Documents\New_Tool.py", line 32, in get_word_xml
zip = zipfile.ZipFile(f)
File "C:\Progra~1\Anaconda3\lib\zipfile.py", line 1222, in __init__
self._RealGetContents()
File "C:\Progra~1\Anaconda3\lib\zipfile.py", line 1289, in _RealGetContents
raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file

以二进制模式打开文件:

with open(docx_filename, 'rb') as f: