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



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

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.jpg2.jpg 等。

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

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() 等获取文件列表。

我找不到一种方法来清除 zip 存档的内容,所以我提取到一个临时目录并 glob 它。

import os
import glob
import zipfile
import tempfile
with tempfile.TemporaryDirectory() as tempdir:
    # extract zip to temporary directory to perform glob operations on it
    with zipfile.ZipFile(your_zip_file) as zf:
        zf.extractall(str(tempdir))
    # apply any glob statement here
    newest_one = max(glob.glob(f"{tempdir}/**/*", recursive=True), key=os.path.getctime)

最新更新