5. Come Usare Archivi Zip in Python

In questa lezione ci occuperemo di archivi compressi in formato .zip utilizzando due moduli della Standard Library: il modulo os per navigare nel sistema e il modulo zipfile che si occuperà di comprimere e decomprimere.

import os, zipfile


Come creare un archivio zip

Iniziamo partendo dalla creazione di un archivio zip nei nostri programmi in Python. In maniera simile a quanto visto nella lezione sui file di testo facciamo:

# creazione/apertura in modalità scrittura
archivio = zipfile.ZipFile('mio_archivio.zip', "w") 

# aggiunta file e compressione
archivio.write("/file/da/comprimere/urls.py", compress_type=zipfile.ZIP_DEFLATED) 

# chiusura
archivio.close()

Tentare di aggiungere del contenuto ad un archivio già esistente, utilizzando il parametro w ne cancellerebbe tutto il contenuto. Per aggiungere file in maniera sicura si utilizzata il parametro a, da append:

# apertura in modalità aggiunta
archivio = zipfile.ZipFile('mio_archivio.zip',"a") 

archivio.write("manage.py", compress_type=zipfile.ZIP_DEFLATED)

archivio.close()

Ricordate: l'archivio va sempre chiuso!


Come estrarre il contenuto di un archivio zip

Passiamo ora all'estrazione del contenuto di un archivio zip, facciamo ciò grazie ad extractall():

# apertura dell'archivio per estrazione
archivio = zipfile.ZipFile('mio_archivio.zip') 

# estrazione di tutti i file
archivio.extractall("/percorso/dove/estrarre/volendo/nuova/cartella") 

# chiusura
archivio.close()

Potete anche estrarre un singolo file usando extract() invece di extractall():

# apertura dell'archivio per estrazione
archivio = zipfile.ZipFile('mio_archivio.zip') 

archivio.extract("file","/percorso/dove/estrarre/volendo/nuova/cartella")

archivio.close()


Come leggere informazioni sul contenuto di un archivio zip

Infine possiamo leggere delle preziose informazioni riguardo al contenuto di un file zip, qualora ci serva visionarlo dall'interno dei nostri programmi per poter effettuare delle azioni specifiche con ciascun file presente:

# apertura dell'archivio per lettura
# archivio = zipfile.ZipFile('mio_archivio.zip') 

# effettua una lista del contenuto del'archivio
archivio.namelist() 
["manage.py","urls.py"]

urlsinfo = archivio.getinfo("urls.py")
urlsinfo.filesize
urlsinfo.compress_size

# chiusura
archivio.close()