2012-07-13 8 views
8

Ho un codice che comprime ogni file in una cartella specifica con zip ma voglio comprimerlo con 7zip, quindi come fare?Come comprimere con 7zip invece di zip, codice che cambia

Questo è quello che ho finora:

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

cambiando l'estensione del file non cambierà il formato del file né l'algoritmo di compressione usato. sarà necessario chiamare il client della riga di comando 7zip tramite una chiamata di sottoprocesso. –

+2

Lo so, ho bisogno di un esempio. – zeromancer

risposta

7

si può provare il metodo di riga di comando

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

o per tutti i file nella cartella

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

e come posso implementarlo sul mio codice? – zeromancer

+2

non funziona. – zeromancer

+3

Chi usa l'estensione '.7zip'? Ogni file 7-zip che ho visto è stato '.7z'. –

0

Non fa sembra essere un buon modulo Python per creare un archivio 7z (nonostante quello che dice la documentazione, py7zlib può solo leggi loro).

Una soluzione alternativa consiste nel scaricare l'SDK 7z (http://www.7-zip.org/sdk.html) e utilizzare gli eseguibili 7zr forniti con il modulo del sottoprocesso. 7z è di dominio pubblico in modo da poter portare questo programma standalone senza restrizioni.

+0

E che dire di https://github.com/dsoprea/PyEasyArchive? – Winand

+0

Sembra che funzioni su Linux, ma non su Windows. –

Problemi correlati