Home / Programmazione / Python / Gestire file ZIP con Python
Mattepuffo

Gestire file ZIP con Python

Gestire file ZIP con Python

Torniamo a parlare di Python (linguaggio che purtroppo non riesco a seguire più di tanto).

Oggi vediamo come gestire i file ZIP.

Se vogliamo comprimere un file:

f = zipfile.ZipFile('python_zip.zip', 'w', zipfile.ZIP_DEFLATED)
f.write('file_da_comprimere.txt')
f.close()

All'oggetto ZipFile passiamo come parametri il nome del file zippato, il modo ('w' per creare/sovrascrivere il file, 'r' per leggere il file, 'a' per appendere al file) e il metodo di compressione.

Con la funzione write indichiamo il file da mettere nell'archivio.

Se invece vogliamo aggiungere un file all'archivio basta sosituire 'w' con 'a'.

Per estrarre il contenuto di un archivio:

import zipfile
a = zipfile.ZipFile('archivio.zip', 'r')
for filename in a.namelist():
     data = a.read(filename)
     file = open(filename, 'w+b')
     file.write(data)
     file.close()

Prima identifichiamo il file compresso.

Con la funzione namelist identifichiamo i file compresi nell'archivio, e per ogni voce lo apriamo con la funzione open e lo scriviamo con la funzione write.

Come ultimo esempio vediamo come comprimere tutti i file e cartelle in maniera ricorsiva:

import zipfile
f = zipfile.ZipFile('archivio.zip', 'w', zipfile.ZIP_DEFLATED)
startdir = "percorso/directory"
for dirpath, dirnames, filenames in os.walk(startdir):
    for filename in filenames:
        f.write(os.path.join(dirpath, filename))
        f.close()

Prima di tutto i soliti parametri per la creazione del file compresso.

Poi partiamo da una directory iniziale (attenzione ai percorsi a seconda del sistema in uso) e poi usiamo due cicli annnidati per listare tutto quello che c'è dentro alla directory iniziale; questo viene in maniera semi-automatica usando la funzione os.walk.