2012-03-13 14 views
5

Jeśli robię coś takiego:python jak dołączyć do pliku w archiwum zip

from zipfile import ZipFile 

zip = ZipFile(archive, "a") 

for x in range(5): 
    zip.writestr("file1.txt", "blabla") 

Będzie utworzyć archiwum z 5 plików nazwane „plik1.txt”. Co chcę osiągnąć, to posiadanie jednego skompresowanego pliku, do którego każda iteracja pętli dołącza jakąś zawartość. Czy jest to możliwe bez jakiegoś bufora pomocniczego i jak to zrobić?

+0

@MoSander: Myślę, że mnowotka chce dołączyć treści do jednego pliku w archiwum, nie dołączyć plik do archiwum. – abw333

+0

@ abw333 tak, teraz to widzę. Dołączenie pliku do archiwum było tym, co * I * chciałem zrobić, gdy wszedłem do tego posta;) –

Odpowiedz

3

To niemożliwe z pakietem zipfile ale pisząc do skompresowanych plików są obsługiwane w gzip:

import gzip 
content = "Lots of content here" 
f = gzip.open('/home/joe/file.txt.gz', 'wb') 
f.write(content) 
f.close() 
+3

Ale gzip może zawierać tylko jeden plik. – Dikei

+0

Tak, ale może być używany razem z [tarfile] (http://docs.python.org/library/tarfile.html) lub [zipfile] (http://docs.python.org/library/zipfile.html). –

+1

Gdy używasz go z tar, nie możesz już pisać bezpośrednio do takiego pliku :) – Dikei

5

Jest całkiem możliwe, aby dołączyć pliki do skompresowanego archiwum przy użyciu Pythona.

Testowane na Linux Mint 14, Python 2,7

import zipfile 

#Create compressed zip archive and add files 
z = zipfile.ZipFile("myzip.zip", "w",zipfile.ZIP_DEFLATED) 
z.write("file1.ext") 
z.write("file2.ext") 
z.printdir() 
z.close() 

#Append files to compressed archive 
z = zipfile.ZipFile("myzip.zip", "a",zipfile.ZIP_DEFLATED) 
z.write("file3.ext") 
z.printdir() 
z.close() 

#Extract all files in archive 
z = zipfile.ZipFile("myzip.zip", "r",zipfile.ZIP_DEFLATED) 
z.extractall("mydir") 
z.close() 
+0

Wierzę, że czytelne odczytanie tego pytania jest takie, że OP chce dołączyć do 'file1.ext', dodając dodatkową zawartość do istniejącego pliku w wielu iteracjach, w przeciwieństwie do dodawania dodatkowych plików. –