Dateien in Python entpacken

Antworten:

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

Das wars so ziemlich!

Rahul
quelle
7
Was ist, wenn der Inhalt des ZIP-Archivs in allen ZIP-Archiven gleich ist? Wie benenne ich den Inhalt vor dem Extrahieren um? Beispiel: 1.zip 2.zip .. alle enthalten content.txt: alle wie 1content.txt extrahieren 2content.txt?
Iratzhash
8
@iratzhash Normalerweise erstelle ich mit tempfile ein neues temporäres Verzeichnis für den Inhalt: docs.python.org/3/library/tempfile.html Ich entpacke in das temporäre Verzeichnis und verschiebe / organisiere die Dateien von dort.
Dave Forgac
8
@ 3kstc würde ich from zipfile import ZipFile. Wenn Sie es verwenden, müssen Sie es nicht mehr verwenden zipfile.ZipFileund können es verwenden ZipFile(zip_file_name).
Debug255
@iratzhash Mir ist klar, dass du vor 1,5 Jahren einen Kommentar abgegeben hast. Aber nur damit andere wissen, sind Inhalte in einer Zip-Datei normalerweise schreibgeschützt. Eine gute Antwort ist hier von "bouke"
Debug255
Eine Art Meta-Notiz, aber die Bearbeitung vom November 2018 macht dies ziemlich identisch mit einer anderen Antwort, die bereits den Kontextmanager verwendet hat (und Links zu dem, was das bedeutet).
Engineero
303

Wenn Sie Python 3.2 oder höher verwenden:

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

Sie müssen das Schließen oder Try / Catch nicht verwenden, da es die Kontextmanager- Konstruktion verwendet.

user1741137
quelle
18
ZipFile arbeitet auch als Kontextmanager in 2.7 oder höher: docs.python.org/2/library/zipfile.html#zipfile.ZipFile
FelixEnescu
Wie gehe ich mit der Ausnahme docs.python.org/3.6/library/zipfile.html#zipfile.BadZipFile um ? Was ist im Allgemeinen die beste Vorgehensweise für try / außer mit dem Kontextmanager (with-Anweisung)?
SnowOnion
1
zipfile+ pathlib= gewinnen. Stört es Sie, wenn ich Ihre Antwort leicht aktualisiere?
Datanovice
38

Verwenden Sie die extractallMethode, wenn Sie Python 2.6+ verwenden

zip = ZipFile('file.zip')
zip.extractall()
Dan Breen
quelle
Müssen Sie kein Ziel angeben (zip.extractall (Ziel))?
Asonnenschein
3
Nicht, wenn Sie nur in dasselbe Verzeichnis wie die
Dan Gayle
10
@ DanGayle dies scheint das Extrahieren der Zip-Datei in das aktuelle Arbeitsverzeichnis, NICHT den Speicherort der Zip-Datei
Brian Leishman
4
für mich hat ZipFile () nicht funktioniert, aber zipfile.ZipFile () hat - nach dem Import von zipfile
Agile Bean
6

Sie können auch nur importieren ZipFile:

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

Funktioniert in Python 2 und Python 3 .

simhumileco
quelle
1
Vielen Dank für Ihre Aufmerksamkeit @MylesHollowed Dies ist jedoch keine Kopie der akzeptierten Antwort. Ich stimme zu, dass sie einander ähnlich sind, aber sie sind unterschiedlich. Dies wird auch durch Ihren Kommentar angezeigt, da der akzeptierte definitiv besser für Sie ist als meiner. Wenn es eine Kopie wäre, wäre es dasselbe ... Für jemanden kann meine Antwort wertvoll sein, weil sie vielleicht besser lesbar ist und wie Sie bemerkt haben, weniger Code importieren ... Aufgrund dieser Unterschiede habe ich beschlossen, meine Antwort zu geben eine Alternative geben. Können wir deshalb nicht andere Antworten geben, nachdem wir eine akzeptiert haben? Alles Gute
simhumileco
Was ist los mit dieser Antwort? Warum hat ihr jemand einen negativen Punkt gegeben? Immerhin ist es die Antwort auf die Frage und zeichnet sich durch ihre Einfachheit im Vergleich zu anderen Antworten aus, was für einige Leute wichtig sein kann, die nach einer Antwort suchen. Ist es nicht?
simhumileco
1
@MylesHollowed import zipfile.ZipFilegeneriert ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a packagein 3.6.5. Ich bin offen dafür, dass meinerseits ein Bedienerfehler vorliegt, aber ich weiß nicht, was es ist.
MikeF
6

Versuche dies :


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() 

Pfad: Entpacken Sie den Pfad der Datei

Fertig Jin
quelle
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)

Dies enthält keine Validierung für die Datei, wenn sie nicht komprimiert ist. Wenn der Ordner keine ZIP-Datei enthält, schlägt dies fehl.

user3911901
quelle