zipfile.ZipFile 提取了错误的文件

zipfile.ZipFile extracts the wrong file

我正在处理一个使用文档的 xml 文件进行操作的项目。我的方法如下。首先将 DOCX 文档转换为 zip 存档,然后提取该存档的内容以访问 document.xml 文件,最后将 XML 转换为 txt 以便使用它。

所以我在文档上完成了上述所有操作,并且一切正常,但是当我决定使用不同的文档时,Zipfile 库不会提取新 ZIP 存档的内容,但是不知何故提取我之前处理的旧文档的内容,并将 document.xml 文件转换为 document.txt 甚至 运行 将 XML 转换为 txt 的代码块.

最糟糕的是旧文档甚至不在目录中了,所以我不知道 Zipfile 是如何提取那个甚至不在路径中的特定文档的内容的。

这是我在 Jupyter notebook 中使用的代码。

import shutil
import zipfile

# Convert the DOCX to ZIP
shutil.copyfile('data/docx/input.docx', 'data/zip/document.zip')

# Extract the ZIP
with zipfile.ZipFile('zip/document.zip', 'r') as zip_ref:
    zip_ref.extractall('data/extracted/')

# Convert "document.xml" to txt
os.rename('extracted/word/document.xml', 'extracted/word/document.txt')

# Read the txt file
with open('extracted/word/document.txt') as intxt:
    data = intxt.read()

这是第一个文档的解压缩 zip 存档的目录树。

data -
     1-docx
     2-zip
     3-extracted/-
                1-customXml/
                2-docProps/
                3-_rels
                4-[Content_Types].xml
                5-word/-document.txt

第二个文件的目录树应该如下

data -
     1-docx
     2-zip
     3-extracted/-
                1-customXml/
                2-docProps/
                3-_rels
                4-[Content_Types].xml
                5-word/-document.xml

但是 Zipfile 正在提取第一个文档的内容,即使 DOCX 文件不在 directory.I 我也在使用 Ubuntu 20.04 所以我不确定它是否有与我的 OS.

有关

我怀疑您遇到了相对路径问题,因为解压缩任何 Word 文档都会创建相同的 file/directory 结构。我建议使用绝对路径来避免这种情况。您可能还想做的是,在完成对提取的文件和目录的操作和处理后,删除它们。这样您就不会遇到任何延迟文件问题。