Проверьте, существует ли каталог в zip-файле с Python

Первоначально я думал об использовании os.path.isdir но я не думаю, что это работает для файлов zip. Есть ли способ заглянуть в zip-файл и убедиться, что этот каталог существует? Я хотел бы предотвратить использование unzip -l "$@" как можно больше, но если это единственное решение, то я думаю, что у меня нет выбора.

3 ответов


просто проверьте имя файла с " / " в конце его.

import zipfile

def isdir(z, name):
    return any(x.startswith("%s/" % name.rstrip("/")) for x in z.namelist())

f = zipfile.ZipFile("sample.zip", "r")
print isdir(f, "a")
print isdir(f, "a/b")
print isdir(f, "a/X")

вы используете эту строку

any(x.startswith("%s/" % name.rstrip("/")) for x in z.namelist())

потому что возможно, что архив не содержит каталога явно; просто путь с именем каталога.

результат выполнения:

$ mkdir -p a/b/c/d
$ touch a/X
$ zip -r sample.zip a
adding: a/ (stored 0%)
adding: a/X (stored 0%)
adding: a/b/ (stored 0%)
adding: a/b/c/ (stored 0%)
adding: a/b/c/d/ (stored 0%)

$ python z.py
True
True
False

вы можете проверить наличие каталогов с помощью zip-файл.namelist ().

import os, zipfile
dir = "some/directory/"

z = zipfile.ZipFile("myfile.zip")
if dir in z.namelist():
    print "Found %s!" % dir

вы можете сделать это с помощью встроенной библиотеки ZipFile.

import zipfile
z = zipfile.ZipFile("file.zip")

if "DirName/" in [member.filename for member in z.infolist()]:
    print("Directory exists in archive")

протестировано и функционально с Python32.