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.