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

Python使用ZipFile获取压缩包不含目录项的文件列表

ZipFile获取文件列表时过滤目录项的实现方案

直接遍历f.filelist拿到的路径列表会同时包含目录和文件,用固定位置切片的方式兼容性很差,遇到无外层目录的单文件压缩包就会出错,最稳定的实现方式是利用ZipInfo对象自带的目录判断方法过滤。

原始问题代码

from zipfile import ZipFile
with ZipFile("test.zip", "r") as f:
    f.extractall(".")
    names = [file.filename for file in f.filelist]
print(names)

运行输出(混入了目录项):

['New folder/', 'New folder/asdasd.txt', 'New folder/asdasdsad.txt']

期望输出(仅保留文件路径):

['New folder/asdasd.txt', 'New folder/asdasdsad.txt']

修正后代码

在列表推导式中增加判断,过滤掉所有目录类型的条目即可,适配任意目录结构的zip压缩包:

from zipfile import ZipFile
with ZipFile("test.zip", "r") as f:
    f.extractall(".")
    names = [file.filename for file in f.filelist if not file.is_dir()]
print(names)

注意点

  • 不要依赖「目录项排在列表最前」的隐含规则,不同工具打包的zip文件,filelist的条目顺序没有统一规范,靠位置切片过滤很容易出问题
  • is_dir()是zipfile模块内置的判断方法,会自动识别以路径分隔符结尾的目录条目,判断逻辑准确,不需要自己手写字符串结尾判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:09:20