Decompressione dei file in Python


Risposte:


787
import zipfile
with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref:
    zip_ref.extractall(directory_to_extract_to)

È praticamente tutto!


7
cosa succede se il contenuto dell'archivio .zip è lo stesso, in tutti gli archivi .zip? come rinominare il contenuto prima di estrarlo? esempio: 1.zip 2.zip .. contengono tutti content.txt: estrae tutti come 1content.txt 2content.txt?
Iratzhash,

8
@iratzhash In genere creo una nuova directory temporanea per i contenuti usando tempfile: docs.python.org/3/library/tempfile.html Decomprendo nella directory temporanea e spostando / organizzando i file da lì.
Dave Forgac, il

8
@ 3kstc lo farei from zipfile import ZipFile. Quando lo si utilizza, non è più necessario utilizzare zipfile.ZipFilee è possibile utilizzare ZipFile(zip_file_name).
Debug255,

@iratzhash Mi rendo conto che hai commentato 1,5 anni fa. Ma solo così altri lo sanno, di solito i contenuti all'interno di un file zip sono di sola lettura. Una buona risposta è qui di "bouke"
Debug255,

Una specie di meta-nota, ma la modifica di novembre 2018 lo rende praticamente identico a un'altra risposta che ha già utilizzato il gestore del contesto (e si collega a ciò che significa).
Engineero,

304

Se si utilizza Python 3.2 o versioni successive:

import zipfile
with zipfile.ZipFile("file.zip","r") as zip_ref:
    zip_ref.extractall("targetdir")

Non è necessario utilizzare la chiusura o provare / intercettare in quanto utilizza la costruzione del gestore di contesto .


18
ZipFile funziona anche come gestore di contesto in 2.7 o versioni
FelixEnescu

Come gestire l' eccezione docs.python.org/3.6/library/zipfile.html#zipfile.BadZipFile ? In generale, qual è la migliore pratica da usare try / tranne con il gestore di contesto (con istruzione)?
SnowOnion,

1
zipfile+ pathlib= vittoria. ti dispiace se aggiorno leggermente la tua risposta?
Datanovice,

38

Usa il extractallmetodo, se stai usando Python 2.6+

zip = ZipFile('file.zip')
zip.extractall()

Non è necessario specificare una destinazione (zip.extractall (destinazione))?
asonnenschein,

3
Non se stai semplicemente estraendo nella stessa directory del file zip
Dan Gayle il

10
@DanGayle sembra estrarre il file zip nella directory di lavoro corrente, NON la posizione del file zip
Brian Leishman,

4
per me, ZipFile () non ha funzionato ma zipfile.ZipFile () ha funzionato - dopo l'importazione zipfile
Fagiolo Agile

6

Puoi anche importare solo ZipFile:

from zipfile import ZipFile
zf = ZipFile('path_to_file/file.zip', 'r')
zf.extractall('path_to_extract_folder')
zf.close()

Funziona in Python 2 e Python 3 .


1
Grazie per l'attenzione @MylesHollowed Tuttavia, questa non è una copia della risposta accettata. Sono d'accordo che sono simili tra loro, ma sono diversi. Questo è indicato anche dal tuo commento, perché quello accettato è decisamente migliore per te del mio. Se fosse una copia, sarebbe lo stesso ... Per qualcuno la mia risposta potrebbe essere preziosa perché forse è più leggibile e come hai notato importa meno codice ... È a causa di queste differenze che ho deciso di mettere la mia risposta per dare un'alternativa. Non è per questo che possiamo dare altre risposte dopo averne accettata una? Tutto il meglio
simhumileco,

Cosa c'è di sbagliato in questa risposta? Perché qualcuno le ha dato un punto negativo? Dopotutto, è la risposta alla domanda e si distingue per la sua semplicità rispetto ad altre risposte, che può essere importante per alcune persone che cercano una risposta. No?
simhumileco,

1
@MylesHollowed import zipfile.ZipFilegenera ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a packagein 3.6.5. Sono aperto al fatto che sia un errore dell'operatore da parte mia, ma non so di cosa si tratti.
MikeF,

6

prova questo :


import zipfile
def un_zipFiles(path):
    files=os.listdir(path)
    for file in files:
        if file.endswith('.zip'):
            filePath=path+'/'+file
            zip_file = zipfile.ZipFile(filePath)
            for names in zip_file.namelist():
                zip_file.extract(names,path)
            zip_file.close() 

percorso: decomprime il percorso del file


3
import os 
zip_file_path = "C:\AA\BB"
file_list = os.listdir(path)
abs_path = []
for a in file_list:
    x = zip_file_path+'\\'+a
    print x
    abs_path.append(x)
for f in abs_path:
    zip=zipfile.ZipFile(f)
    zip.extractall(zip_file_path)

Questo non contiene validazione per il file se non è zip. Se la cartella contiene file non .zip, fallirà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.