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

yel*_*w01 1 python zipfile

我正在尝试读取使用该方法.zip命名的存档中的所有文件。data1.zipglob()

import glob
from zipfile import ZipFile

archive = ZipFile('data1.zip','r')
files = archive.read(glob.glob('*.jpg'))
Run Code Online (Sandbox Code Playgroud)

错误信息:

TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

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

files = [archive.read(str(i+1)+'.jpg') for i in range(100)]
Run Code Online (Sandbox Code Playgroud)

这是糟糕的,因为我假设我的文件命名1.jpg2.jpg等等。

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

tza*_*man 13

glob不会查看您的存档内部,它只会为您提供jpg当前工作目录中的文件列表。

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

您是否只是在寻找:

archive = ZipFile('data1.zip', 'r')
files = archive.namelist()
Run Code Online (Sandbox Code Playgroud)

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

files = [name for name in archive.namelist() if name.endswith('.jpg')]
Run Code Online (Sandbox Code Playgroud)

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

files = [archive.read(name) for name in archive.namelist()]
Run Code Online (Sandbox Code Playgroud)

尽管我可能更愿意将名称映射到内容的字典:

files = {name: archive.read(name) for name in archive.namelist()}
Run Code Online (Sandbox Code Playgroud)

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

files['1.jpg']
Run Code Online (Sandbox Code Playgroud)

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