2012-03-13 20 views
5

Si hago algo como esto:pitón cómo anexar a presentar en el archivo zip

from zipfile import ZipFile 

zip = ZipFile(archive, "a") 

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

Se va a crear un archivo con 5 todos los archivos llamado "file1.txt". Lo que quiero lograr es tener un archivo comprimido al que cada iteración de bucle agregue algún contenido. ¿Es posible sin tener algún tipo de memoria intermedia auxiliar y cómo hacer esto?

+0

@MoSander: Creo que mnowotka quiere añadir contenido a un solo archivo dentro del archivo, no anexar un archivo al archivo. – abw333

+0

@ abw333 sí, ya veo eso también. Adjuntar un archivo al archivo era lo que * I * quería hacer cuando llegué a esta publicación;) –

Respuesta

3

Es imposible con el paquete zip pero escribir a los archivos comprimidos se apoya en gzip:

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

Pero gzip solo puede contener un archivo. – Dikei

+0

Sí, pero se puede usar junto con [tarfile] (http://docs.python.org/library/tarfile.html) o [zipfile] (http://docs.python.org/library/zipfile.html) –

+1

Cuando lo utiliza con tar, no puede escribir directamente en un único archivo como este :) – Dikei

5

Su muy posible anexar archivos a archivo comprimido utilizando Python.

Probado en 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

Creo que la lectura clara de la pregunta es que el OP quiere anexar 'file1.ext', agregando contenido adicional a ese archivo existente en múltiples iteraciones, en lugar de agregar archivos adicionales. –