读取python中.zip存档中的所有文件

时间:2017-10-05 14:23:39

标签: python zipfile

我正在尝试使用.zip方法阅读名为data1.zip的{​​{1}}存档中的所有文件。

glob()

错误讯息:

import glob
from zipfile import ZipFile

archive = ZipFile('data1.zip','r')
files = archive.read(glob.glob('*.jpg'))

我正在使用的问题的解决方案是:

TypeError: unhashable type: 'list'

这很糟糕,因为我假设我的文件名为files = [archive.read(str(i+1)+'.jpg') for i in range(100)] 1.jpg等。

有没有更好的方法使用python最佳实践来做到这一点?不一定要使用2.jpg

1 个答案:

答案 0 :(得分:4)

glob没有查看您的档案内容,它只会为您提供当前工作目录中jpg个文件的列表。

ZipFile已经有了返回存档中文件信息的方法:namelist返回名称,infolist返回包含元数据的ZipInfo个对象。

您只是在寻找:

archive = ZipFile('data1.zip', 'r')
files = archive.namelist()

或者如果您只想要.jpg个文件:

files = [name for name in archive.namelist() if name.endswith('.jpg')]

或者如果您想要阅读每个文件的所有内容:

files = [archive.read(name) for name in archive.namelist()]

虽然我可能更喜欢将名称映射到内容:

files = {name: archive.read(name) for name in archive.namelist()}

这样你就可以访问这样的内容:

files['1.jpg']

或者使用files.keys()等获取文件列表