Вывести структуру zip архива Python
у решил сделать одну задачу:
Выводить файловую структуру мы научились. Теперь на очереди — архивы.
Напишите программу, на вход которой поступает zip-архив с именем input.zip. Вам же требуется вывести на экран его файловую структуру. Поскольку внутри архива может быть своя иерархия каталогов, то каждый уровень вложенности необходимо предварить двумя пробелами.
Если архив пустой, то ничего выводить на экран не требуется.
При обходе содержимого архива выводите файлы в том порядке, в котором вы их получаете. Формат вывода (_ - пробел)
1
__2
__3
____files
______123.txt
______libs
__4
Но я настолько запарился с этой задачей, что потерял все свои нервы. В итоге у меня получилось это:
from zipfile import ZipFile
maindir = ''
filelist = []
finallist = ''
ok1 = False
ok = True
with ZipFile('input.zip') as myzip:
dir = ''
for name in myzip.namelist():
ok = True
while ok:
if '/' in name:
if maindir in name:
name = name.rstrip(maindir + '/')
name = ' ' + name
if '/' in name:
ok1 = True
elif ok1:
maindir += name.split('/')[0]
else:
maindir = name.split('/')[0]
else:
ok = False
print(name)
Но ничего, к сожалению, не получилось. Можете помочь решить?
Ответы (1 шт):
Обрезаем / в конце каждого полного имени. Бьём оставшуюся строку по /. Количество элементов в полученном списке минус один - это нужное количество отступов. Последний элемент - имя файла/директории для вывода на печать.
from zipfile import ZipFile
with ZipFile('input.zip') as myzip:
for name in myzip.namelist():
items = name.rstrip("/").split("/")
print(" "*(len(items)-1) + items[-1])