Проверьте, существует ли каталог в 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.