我正在尝试读取使用该方法.zip
命名的存档中的所有文件。data1.zip
glob()
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.jpg
,2.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()
等获取文件列表。
归档时间: |
|
查看次数: |
6666 次 |
最近记录: |