Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2018 21:08:34

vSakhanda
Зарегистрирован: 2018-10-25
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавить в архив директорию со всеми файлами, используя модуль zipfile

 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’ ? И как это можно организовать ?
Моя программа добавляет в архив только название каталога.

Офлайн

#2 Ноя. 2, 2018 22:11:26

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Добавить в архив директорию со всеми файлами, используя модуль zipfile

 import shutil
shutil.make_archive(output_filename, 'zip', dir_name)

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




Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Ноя. 3, 2018 12:15:09

vSakhanda
Зарегистрирован: 2018-10-25
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавить в архив директорию со всеми файлами, используя модуль zipfile

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)

Офлайн

#4 Ноя. 5, 2018 22:59:16

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Добавить в архив директорию со всеми файлами, используя модуль zipfile

Вы попросили архив все папки.
А теперь условия поменялись.
Разумеется можно указывать разные папки и добавлять их все в один архив.
Почитайте доку на указанные библиотеки там все есть.
Лазить же каждый раз вместо вас в Гугль скучно



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Ноя. 6, 2018 09:50:05

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Добавить в архив директорию со всеми файлами, используя модуль zipfile

Вопрос состоит в том, что надо только добавлять отсутствующие папки и файлы?
1. У zipfile есть возможность получения сведений о архиве.
2. Имеется определенный список папок, файлы которых надо добавить
Исходя из этого можно сделать скриптик, который сравнит содержимое с требующими упаковки. Затем, имея результат анализа, можно открыть старый архив в режиме добавления и добавить недостающие папки и файлы.

Офлайн

#6 Ноя. 6, 2018 11:31:28

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Добавить в архив директорию со всеми файлами, используя модуль zipfile

Все это есть в документации а Гугл пестрит вариантами решений.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Ноя. 6, 2018 13:41:50

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Добавить в архив директорию со всеми файлами, используя модуль zipfile

 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)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version