2012-07-13 7 views
8

Tengo un código que comprime todos los archivos en una carpeta específica con zip pero quiero comprimirlo con 7zip, entonces, ¿cómo hacerlo?Cómo comprimir con 7zip en lugar de zip, cambio de código

Esto es lo que tengo hasta ahora:

for date in dict_date:#zipping folders and get same name like the folder 
    with ZipFile(os.path.join(src, '{0}.7z'.format(date)), 'w') as myzip: 
     for subFolder in dict_date[date]: 
      for fil in os.listdir(os.path.join(src, date, subFolder)): 
       if not fil.endswith('.7z'): 
        myzip.write(os.path.join(src, date, subFolder, fil)) 
+4

al cambiar la extensión de archivo no cambiará el formato de archivo ni el algoritmo de compresión utilizado. tendrá que llamar al cliente de línea de comandos 7zip a través de una llamada de subproceso. –

+2

Lo sé, necesito un ejemplo. – zeromancer

Respuesta

7

Usted puede probar el método de línea de comandos

import subprocess 
subprocess.call(['7z', 'a', filename+'.7z', filename]) 

o para todos los archivos en la carpeta

subprocess.call(['7z', 'a', filename+'.7z', "*.*"]) 
+0

y cómo lo implemento en mi código? – zeromancer

+2

no funciona. – zeromancer

+3

¿Quién usa la extensión '.7zip'? Cada archivo 7-zip que he visto ha sido '.7z'. –

0

Hay NO parece ser un buen módulo de Python para crear un archivo 7z (a pesar de lo que dice la documentación, py7zlib solo puede lea ellos).

Una solución alternativa es descargar el SDK 7z (http://www.7-zip.org/sdk.html) y utilizar los 7zr ejecutables que vienen con él a través del módulo de subproceso. 7z es de dominio público, por lo que puede llevar este programa independiente sin restricciones.

+0

¿Y qué hay de https://github.com/dsoprea/PyEasyArchive? – Winand

+0

Parece que podría funcionar en Linux, pero no en Windows. –

Cuestiones relacionadas