2012-10-08 30 views
12

Estoy usando el paquete ZipFile para comprimir un archivo en Python. Aquí está mi código:¿Cómo puedo comprimir el archivo con una estructura de directorios plana utilizando Zipfile en Python?

archive = zipfile.ZipFile(join(settings.ARCHIVES_DIR, 'test.zip'), "a") 

for pdffile in glob.glob(join(settings.IBILLING_DIR, '*.pdf')): 
    archive.write(pdffile) 

archive.close() 

El problema al que me enfrento es que el archivo ZIP que se crea contiene una estructura de directorios. Los archivos que se agregan se agregan con la ruta completa, lo que significa que el usuario que extrae el archivo también terminará obteniendo una estructura de directorio. Me gustaría agregar archivos al ZIP pero sin ninguna estructura de directorio.

¿Cómo puedo hacer esto? No encontré esta información en los documentos.

Gracias

+0

intente utilizar 'os.walk', en lugar de glob? – wim

Respuesta

17

primero Añadir

import os 

a continuación, modificar la línea archive.write a ser:

archive.write(pdffile, os.path.basename(pdffile)) 

Esto especifica que cada pdf debe ser escrito en el archivo zip con un camino equivalente a solo la parte del nombre de archivo de la ruta desde la que la está leyendo (especificando arcname parameter for the write() call).

Tenga en cuenta, sin embargo, que esto significa que si tiene dos archivos PDF con el mismo nombre en directorios diferentes, uno sobrescribirá el otro.

Cuestiones relacionadas