Найти - Пользователи
Полная версия: Добавить в архив директорию со всеми файлами, используя модуль zipfile
Начало » Python для новичков » Добавить в архив директорию со всеми файлами, используя модуль zipfile
1
vSakhanda
 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()

Можно ли с помощью модуля zipfile добавить в архив все, что находится в каталоге по пути ‘C:\\MyDocuments’ ? И как это можно организовать ?
Моя программа добавляет в архив только название каталога.
ZerG
 import shutil
shutil.make_archive(output_filename, 'zip', dir_name)

https://stackoverflow.com/questions/1855095/how-to-create-a-zip-archive-of-a-directory


vSakhanda
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)

Есть ли какой-то простой метод для добавления новых директорий в архив?
Пока мне приходит в голову собрать все каталоги в одну папку(также разархивировать мой прошлый архив в нее) и оттуда уже архивировать обратно. Но это слишком сложно как по мне.
ZerG
Вы попросили архив все папки.
А теперь условия поменялись.
Разумеется можно указывать разные папки и добавлять их все в один архив.
Почитайте доку на указанные библиотеки там все есть.
Лазить же каждый раз вместо вас в Гугль скучно
Rafik
Вопрос состоит в том, что надо только добавлять отсутствующие папки и файлы?
1. У zipfile есть возможность получения сведений о архиве.
2. Имеется определенный список папок, файлы которых надо добавить
Исходя из этого можно сделать скриптик, который сравнит содержимое с требующими упаковки. Затем, имея результат анализа, можно открыть старый архив в режиме добавления и добавить недостающие папки и файлы.
ZerG
Все это есть в документации а Гугл пестрит вариантами решений.
Rodegast
 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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB