Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 2, 2013 14:45:05

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Python и архивация каталога со всем содержимым

Доброго времени суток, уважаемые!
На днях начал изучать python. Возник вопрос, как сделать архив каталога сов сем содержимым?
Делаю так:

#!/usr/bin/python
#coding=utf8
import datetime
import zipfile
import os
now_date=datetime.date.today()
src="/var/www"
dst="backup-"+str(now_date)+".zip"
zip=zipfile.ZipFile(dst, 'w')
zip.write(src, os.path.basename(src), zipfile.ZIP_DEFLATED)
zip.close()

В получившемся zip-архиве находится только пустой каталог www.

Офлайн

#2 Сен. 2, 2013 15:36:08

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Python и архивация каталога со всем содержимым

Так должно работать

with ZipFile('test.zip', 'w') as zip:
    path = 'path\to\folder'
    files = os.listdir(path)
  
    for i in files:
        file = os.path.join(path, i)
        zip.write(file)



Офлайн

#3 Сен. 2, 2013 16:53:21

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Python и архивация каталога со всем содержимым

Выдает:

 File "./new.py", line 6, in <module>
    with zipfile.ZipFile('new.zip', 'w') as zip:
AttributeError: ZipFile instance has no attribute '__exit__'

Офлайн

#4 Сен. 3, 2013 08:15:40

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Python и архивация каталога со всем содержимым

Я понимаю, что вопрос возможно весьма низкого уровня, но не могли бы вы пояснить чайнику как его решить?

Офлайн

#5 Сен. 3, 2013 10:04:01

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Python и архивация каталога со всем содержимым

Попробуй просто без “with as”

import zipfile
import os
zipfd = zipfile.ZipFile('test.zip','w', zipfile.ZIP_DEFLATED)
path = '1'
files = os.listdir(path)
for i in files:
    file = os.path.join(path, i)
    zipfd.write(file)
zipfd.close()

Отредактировано sanodin (Сен. 4, 2013 07:03:20)

Офлайн

#6 Сен. 3, 2013 22:43:52

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Python и архивация каталога со всем содержимым

sanodin
Попробуй просто без “with as”
import zipfile
import os
zipfd = zipfile.ZipFile(open('test.zip','w'),'w', zipfile.ZIP_DEFLATED)
path = ‘1’
files = os.listdir(path)
for i in files:
file = os.path.join(path, i)
zipfd.write(file)
zipfd.close()

Работает, но только в том случае, если каталог содержит файлы. Если в нем есть подкаталоги создается битый архив.
Не могли бы вы пояснить конструкции:
zipfile.ZipFile(open('test.zip','w'),'w', zipfile.ZIP_DEFLATED)
и
os.path.join(path, i)

Офлайн

#7 Сен. 3, 2013 22:55:17

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Python и архивация каталога со всем содержимым

Офлайн

#8 Сен. 4, 2013 06:50:22

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Python и архивация каталога со всем содержимым

import os, zipfile
#from os.path import join, getsize
yourfolder = 'Ваша папка'
arch = zipfile.ZipFile('Название вашего архива.zip', 'w', zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk(yourfolder):
    print root+'\\'+str(files)
    for tarfile in files:
        if tarfile != '':
            arch.write(root+'\\'+tarfile)
arch.close()

Отредактировано sanodin (Сен. 4, 2013 07:06:31)

Офлайн

#9 Сен. 4, 2013 07:34:28

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Python и архивация каталога со всем содержимым

А вам не кажется что для стандартных задачек лучше использовать стандартный подход:

import subprocess as sp
sp.check_call("7z a -tzip arhname dirname")
Меньше писанины, выше быстродействие, больше степень сжатия, намного меньше вероятность возникновения ошибок. Необходимость ручной сборки архива требует специального обоснования.



Отредактировано doza_and (Сен. 4, 2013 07:35:10)

Офлайн

#10 Сен. 5, 2013 11:38:42

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Python и архивация каталога со всем содержимым

sanodin
import os, zipfile
#from os.path import join, getsize
yourfolder = 'Ваша папка'
arch = zipfile.ZipFile('Название вашего архива.zip', 'w', zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk(yourfolder):
    print root+'\\'+str(files)
    for tarfile in files:
        if tarfile != '':
            arch.write(root+'\\'+tarfile)
arch.close()

Работает! НО, если папка пустая и/или содержит пустые подкаталоги, то эта папка не попадает в архив.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version