我正在尝试使用.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
答案 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()
等获取文件列表