Форум сайта python.su
0
from zipfile import * from os import sep pathFile = 'D:' + sep + 'project' + sep + 'archiv.zip' with ZipFile(pathFile, 'w') as myzip: myzip.write('C:\\MyDocuments') myzip.close()
Офлайн
61
import shutil shutil.make_archive(output_filename, 'zip', dir_name)
Офлайн
0
ZerG
Спасибо! Но возникает вопрос, если использовать shutil.make_archive, тогда он перезаписывает архив, в момент совпадения с прошлым. Это не есть хорошо, т.к. у меня есть разные папки для архивирования в разных местах и при попытке добавить новую директорию туда, архив полностью перезаписывается.
Собственно мои попытки:
from os import sep from shutil import make_archive source = ['C:\\MyDocuments', 'C:\\documents'] pathFile = 'D:' + sep + 'project' + sep + 'archiv' for pSource in source: make_archive(pathFile, 'zip', pSource)
Отредактировано vSakhanda (Ноя. 3, 2018 12:18:23)
Офлайн
61
Вы попросили архив все папки.
А теперь условия поменялись.
Разумеется можно указывать разные папки и добавлять их все в один архив.
Почитайте доку на указанные библиотеки там все есть.
Лазить же каждый раз вместо вас в Гугль скучно 
Офлайн
27
Вопрос состоит в том, что надо только добавлять отсутствующие папки и файлы?
1. У zipfile есть возможность получения сведений о архиве.
2. Имеется определенный список папок, файлы которых надо добавить
Исходя из этого можно сделать скриптик, который сравнит содержимое с требующими упаковки. Затем, имея результат анализа, можно открыть старый архив в режиме добавления и добавить недостающие папки и файлы.
Офлайн
61
Все это есть в документации а Гугл пестрит вариантами решений.
Офлайн
186
import os import zipfile as zf def ls_dir(direct): for x in os.listdir(direct): path = os.path.join(direct, x) if os.path.isdir(path): yield from ls_dir(path) else: yield path def zip_dir(direct, zip_file): if os.path.isdir(direct): with zf.ZipFile(zip_file, "a", zf.ZIP_DEFLATED) as z: for path in ls_dir(direct): z.write(path, os.path.relpath(path)) else: raise ValueError(direct)
Офлайн