用 zipfile.infolist() 可以在不解压的情况下读取 zip 成员名称、数量和大小。批量处理时逐包打开,遇到坏包记录错误后继续。

遍历 ZIP 并打印文件清单
将脚本保存为 list_zips.py,把待检查的压缩包放在 archives 目录。
from pathlib import Path
from zipfile import BadZipFile, ZipFile
for archive in sorted(Path("archives").glob("*.zip")):
print(archive.name)
try:
with ZipFile(archive) as bundle:
entries = [item for item in bundle.infolist() if not item.is_dir()]
for item in entries:
print(f" {item.filename!r}: {item.file_size} bytes")
print(f" files={len(entries)} total={sum(x.file_size for x in entries)}")
except (BadZipFile, OSError) as exc:
print(f" cannot read: {exc}")
file_size 是 ZIP 声明的未压缩字节数。清单可用于估算和核对,读取清单并不会验证每个成员的内容。
立即学习“Python免费学习笔记(深入)”;
创建一个最小练习压缩包
在同一目录运行下面的 Python 片段。
from pathlib import Path
from zipfile import ZipFile
Path("archives").mkdir(exist_ok=True)
with ZipFile("archives/demo.zip", "w") as bundle:
bundle.writestr("notes/a.txt", "hello")ZIP 里有一个 5 字节的普通成员。
核对数量和大小
运行清单脚本。再用一个文本文件改成 .zip 后缀,检查错误分支。
python list_zips.py
正常包输出 files=1 total=5,伪造的 ZIP 会显示读取失败。


















