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
相关产品推荐
相关产品推荐

