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

Python解压归档文件时单个文本文件仅部分提取的问题求助

ZIP解压时单个纯文本文件部分提取的问题解决建议

问题背景

编写Python脚本解压ZIP归档时,遇到异常:一个原大小18.8KB的纯文本文件仅被提取出6.6KB,其余文件均可完整提取。已通过Linux内置unzip工具手动解压成功,排除归档损坏可能。尝试过以下三种方法均未解决:

  • 使用shutil模块:
    shutil.unpack_archive(file, format="zip", extract_dir=extract_dir)
    
  • 使用zipfile模块:
    with zipfile.ZipFile(file,'r') as zf:
        zf.extractall(extract_dir)
    
  • 调用系统unzip命令:
    os.system(f"unzip {file} -d {extract_dir}")
    

排查与解决方向

1. 单独提取目标文件

绕开批量提取逻辑,直接读取文件原始字节流并写入:

import os
import zipfile

with zipfile.ZipFile(file, 'r') as zf:
    target_filename = "你的问题文件名.txt"
    with open(os.path.join(extract_dir, target_filename), 'wb') as f:
        f.write(zf.read(target_filename))

这种方式避免了extractall可能的额外处理逻辑,直接获取归档内的完整内容。

2. 检查归档内文件的压缩信息

用zipinfo命令查看目标文件的详细参数:

zipinfo -v your_archive.zip | grep -A 10 "目标文件名.txt"

重点核对uncompressed size是否与18.8KB一致,确认归档内记录的原始大小无误。

3. 替换解压库或升级Python

部分旧版本zipfile对特定压缩算法支持不完善,可尝试使用pyzipper替代:

import pyzipper

with pyzipper.ZipFile(file, 'r') as zf:
    zf.extractall(extract_dir)

安装命令:pip install pyzipper
也可尝试升级Python到3.8及以上版本,修复标准库的潜在bug。

4. 对比文件内容差异

手动解压后,对比完整文件与脚本提取的截断文件,定位截断位置:

diff /path/to/manual_extract/file.txt /path/to/script_extract/file.txt

通过差异判断是编码转换、特殊字符处理还是写入中断导致的问题。

5. 检查提取路径的权限与磁盘空间

确认提取目录有足够读写权限,且磁盘剩余空间充足:

df -h  # 查看磁盘空间
ls -ld /path/to/extract_dir  # 查看目录权限

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:37:20