2012-05-07 20 views
5

Necesito comprimir una carpeta que contiene un archivo .xml y un archivo .fgdb utilizando python. ¿Alguien podría ayudarme? Probé algunas secuencias de comandos que encontré en Internet pero siempre hay algún problema técnico (como crear un archivo zip vacío, o crear un archivo zip No puedo abrir "sin permiso", etc.)Carpeta ZIP con subcarpeta en python

Gracias de antemano.

Respuesta

6

La clave para hacer que funcione es la función os.walk(). Aquí hay un script que reuní en el pasado que debería funcionar. Avíseme si obtiene alguna excepción.

import zipfile 
import os 
import sys 

def zipfolder(foldername, target_dir):    
    zipobj = zipfile.ZipFile(foldername + '.zip', 'w', zipfile.ZIP_DEFLATED) 
    rootlen = len(target_dir) + 1 
    for base, dirs, files in os.walk(target_dir): 
     for file in files: 
      fn = os.path.join(base, file) 
      zipobj.write(fn, fn[rootlen:]) 

zipfolder('thenameofthezipfile', 'thedirectorytobezipped') #insert your variables here 
sys.exit() 
+0

Ok. Ayúdame algo primero. ¿Qué es en ese caso target_dir y qué es el nombre de la carpeta? Solo dame un ejemplo, por favor, para estar seguro. porque probé tu código, se ejecuta sin excepciones pero también sin crear zip? – Z77

+0

Hola Z77, edité el código para que sea más específico para tu problema, por favor revisa el nuevo script. nombre de carpeta es el nombre de la carpeta que desea asignar al nuevo archivo .zip y dir_destino es la carpeta de destino que desea comprimir. Simplemente coloque el script en la carpeta que contiene la carpeta que desea comprimir, cambie las variables en la llamada a la función y funcionará. –

+0

Tnx por su esfuerzo, pero aún nada, no se creó el archivo zip?! :( – Z77

Cuestiones relacionadas