@888vld

Как сделать автоматический zip архиватор на python?

Есть такая структура файлов:

Folder 1
...└─── subfolder 1
........└─── img1.png
........└─── img2.png
........└─── img3.png
...└─── subfolder 2
........└─── img1.png
........└─── img2.png
........└─── img3.png
...└─── subfolder 3
........└─── img1.png
........└─── img2.png
........└─── img3.png
Folder 2
...└─── subfolder 1
........└─── img1.png
........└─── img2.png
........└─── img3.png
...└─── subfolder 2
........└─── img1.png
........└─── img2.png
........└─── img3.png
...└─── subfolder 3
........└─── img1.png
........└─── img2.png
........└─── img3.png
Folder 3
...└─── subfolder 1
........└─── img1.png
........└─── img2.png
........└─── img3.png
...└─── subfolder 2
........└─── img1.png
........└─── img2.png
........└─── img3.png
...└─── subfolder 3
........└─── img1.gif
........└─── img2.gif
........└─── img3.gif

Пытаюсь сделать скрипт на python, чтобы он автоматически проходил по всем папкам и в конечной папке создавал zip архив с теми файлами, которые находятся в этой папке. Имя архива должно быть такое же как и название папки.

То есть структура должна получится такой:

Folder 1
...└─── subfolder 1
........└─── img1.png
........└─── img2.png
........└─── img3.png
........└─── subfolder1.zip
................└─── img1.png
................└─── img2.png
................└─── img3.png

import os
import zipfile

os.chdir('asd/data2')

name = os.path.basename(os.getcwd())
list_files = ["img1.png", "img2.png", "img3.png"]
with zipfile.ZipFile(name + '.zip', 'w') as zip_file:
    for file in list_files:
        zip_file.write(file, compress_type=zipfile.ZIP_DEFLATED)
zip_file.close()


Только мой код работает в конкретно заданой папке os.chdir('asd/data2') А вручную каждый раз прописывать путь к папке очень долго, т.к папок очень большое количество.

Как сделать, чтобы скрипт проходил по всем папкам автоматически?

Заранее спасибо!
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 2
Tomio
@Tomio
backend developer (python, php)
import shutil

output_filename = 'my_archive'
dir_name = '/folder/to/archivate'
shutil.make_archive(output_filename, 'zip', dir_name)


На выходе у вас будет архив с названием 'my_archive.zip' и содержимым папки '/folder/to/archivate', включая все подпапки.
Ответ написан
@888vld Автор вопроса
Это немного не то, что мне надо.
Должно автоматически создаться много архивов в каждой subfolder 1.
Пример структуры, что должна получится на выходе я приложил на примере одной папки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы