You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

zipfile.ZipFile提取异常:解压新压缩包仍返回旧文档内容

问题排查与解决方案

核心问题原因

  • 路径不匹配是首要诱因,代码中所有文件路径没有保持统一:
    1. 生成zip文件时写入路径为data/zip/document.zip,但读取zip时使用的是相对路径zip/document.zip,实际读取的是其他目录下留存的旧zip文件,而非新生成的zip
    2. 解压目标路径为data/extracted/,但后续重命名、读取文件时使用的路径为extracted/xxx,实际访问的是旧运行过程中生成的残留文件
  • 没有清理旧运行残留:每次解压前没有清空data/extracted目录,旧文件不会被新解压的文件覆盖,就会出现“未运行转txt代码也会出现document.txt”的现象
  • Jupyter 运行态缓存:Jupyter 内核会留存之前的运行状态,未重启内核时之前的操作残留会持续生效

修复方案

修正后的完整代码

import os
import shutil
import zipfile

# 自定义路径常量,统一管理避免写错
BASE_DATA_PATH = "data"
DOCX_PATH = os.path.join(BASE_DATA_PATH, "docx/input.docx")
ZIP_PATH = os.path.join(BASE_DATA_PATH, "zip/document.zip")
EXTRACTED_PATH = os.path.join(BASE_DATA_PATH, "extracted")
XML_PATH = os.path.join(EXTRACTED_PATH, "word/document.xml")
TXT_PATH = os.path.join(EXTRACTED_PATH, "word/document.txt")

# 提前清理旧文件,避免残留
if os.path.exists(ZIP_PATH):
    os.remove(ZIP_PATH)
if os.path.exists(EXTRACTED_PATH):
    shutil.rmtree(EXTRACTED_PATH)
os.makedirs(os.path.dirname(ZIP_PATH), exist_ok=True)

# 复制生成zip
shutil.copyfile(DOCX_PATH, ZIP_PATH)

# 解压zip
with zipfile.ZipFile(ZIP_PATH, 'r') as zip_ref:
    zip_ref.extractall(EXTRACTED_PATH)

# 重命名xml为txt
os.rename(XML_PATH, TXT_PATH)

# 读取内容
with open(TXT_PATH) as intxt:
    data = intxt.read()

额外操作建议

  • 每次替换新的docx文件后,先重启Jupyter内核再运行代码,清除之前的运行缓存
  • 可以在复制生成zip后增加校验逻辑,打印zip文件的大小、修改时间,确认对应新替换的docx文件

内容的提问来源于stack exchange,提问作者Salman.S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:21:02