Python: Come decomprimere un file | Estrarre singoli, multipli o tutti i file da un archivio ZIP

In questo articolo discuteremo diversi modi per decomprimere o estrarre singoli, multipli o tutti i file da un archivio zip nella directory corrente o in una diversa.

Nel modulo zipfile di Python, la classe ZipFile fornisce una funzione membro per estrarre tutti i contenuti da un archivio ZIP,

ZipFile.extractall(path=None, members=None, pwd=None)

Accetta i seguenti argomenti :

  • percorso: posizione in cui il file zip deve essere estratto, se non fornito estrarrà il contenuto nella directory corrente.
  • membri: lista di file da estrarre. Estrarrà tutti i file nello zip se questo argomento non è fornito.
  • pwd : Se il file zip è criptato allora passa la password in questo argomento, il default è None.

Modulo richiesto :

from zipfile import ZipFile

Utilizziamo questo per estrarre tutti i contenuti dai file zip.

Estrai tutti i file da un file zip alla directory corrente

Supponiamo di avere un file zip ‘sample.zip’. nella nostra directory corrente, vediamo come estrarre tutti i file da esso.
Per decomprimerlo creiamo prima un oggetto ZipFile aprendo il file zip in modalità lettura e poi chiamiamo extractall() su quell’oggetto cioè

# Create a ZipFile Object and load sample.zip in itwith ZipFile('sampleDir.zip', 'r') as zipObj: # Extract all the contents of zip file in current directory zipObj.extractall()

Estrarrà tutti i file nello zip nella directory corrente. Se i file con lo stesso nome sono già presenti nella posizione di estrazione, allora sovrascriverà quei file.

Estrarre tutti i file da un file zip in una directory diversa

Per estrarre tutti i file dal file zip in una directory diversa, possiamo passare la posizione di destinazione come argomento in extractall(). Il percorso può essere relativo o assoluto.

# Create a ZipFile Object and load sample.zip in itwith ZipFile('sampleDir.zip', 'r') as zipObj: # Extract all the contents of zip file in different directory zipObj.extractall('temp')

Estrarrà tutti i file in ‘sample.zip’ nella cartella temporanea.

Estrarre pochi file da un grande file zip in base alla condizione

Supponiamo di avere un file zip molto grande e abbiamo bisogno di alcuni file da migliaia di file nell’archivio. Decomprimere tutti i file da un grande zip può richiedere minuti. Ma se siamo interessati solo ad alcuni dei file archiviati, allora invece di decomprimere l’intero file possiamo estrarre anche un singolo file dal file zip.

Nel modulo zipfile di Python, la classe ZipFile fornisce una funzione membro per estrarre un singolo da un file ZIP,

ZipFile.extract(member, path=None, pwd=None)

accetta i seguenti argomenti :

  • membro : Nome completo del file da estrarre. Dovrebbe essere uno dalla lista dei nomi dei file archiviati restituiti da ZipFile.namelist()
  • path : posizione in cui il file zip deve essere estratto, se non fornito estrarrà il file nella directory corrente.
  • pwd : Se il file zip è criptato allora passa la password in questo argomento predefinito è None.

Utilizziamo questo per estrarre solo i file csv da un file zip cioè

# Create a ZipFile Object and load sample.zip in itwith ZipFile('sampleDir.zip', 'r') as zipObj: # Get a list of all archived file names from the zip listOfFileNames = zipObj.namelist() # Iterate over the file names for fileName in listOfFileNames: # Check filename endswith csv if fileName.endswith('.csv'): # Extract a single file from zip zipObj.extract(fileName, 'temp_csv')

Estrarrà solo i file csv dall’archivio zip dato.

L’esempio completo è il seguente,

from zipfile import ZipFiledef main(): print('Extract all files in ZIP to current directory') # Create a ZipFile Object and load sample.zip in it with ZipFile('sampleDir.zip', 'r') as zipObj: # Extract all the contents of zip file in current directory zipObj.extractall() print('Extract all files in ZIP to different directory') # Create a ZipFile Object and load sample.zip in it with ZipFile('sampleDir.zip', 'r') as zipObj: # Extract all the contents of zip file in different directory zipObj.extractall('temp') print('Extract single file from ZIP') # Create a ZipFile Object and load sample.zip in it with ZipFile('sampleDir.zip', 'r') as zipObj: # Get a list of all archived file names from the zip listOfFileNames = zipObj.namelist() # Iterate over the file names for fileName in listOfFileNames: # Check filename endswith csv if fileName.endswith('.csv'): # Extract a single file from zip zipObj.extract(fileName, 'temp_csv')if __name__ == '__main__': main()

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.