Python: Wie man eine Datei entpackt | Einzelne, mehrere oder alle Dateien aus einem ZIP-Archiv extrahiert

In diesem Artikel werden wir verschiedene Möglichkeiten besprechen, wie man einzelne, mehrere oder alle Dateien aus einem ZIP-Archiv in das aktuelle oder ein anderes Verzeichnis entpackt oder extrahiert.

Im Zipfile-Modul von Python bietet die Klasse ZipFile eine Funktion, um den gesamten Inhalt eines ZIP-Archivs zu extrahieren,

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

Sie akzeptiert folgende Argumente:

  • path : Ort, an dem die ZIP-Datei extrahiert werden soll, wenn nicht angegeben, wird der Inhalt im aktuellen Verzeichnis extrahiert.
  • members : Liste der zu extrahierenden Dateien. Es werden alle Dateien in der Zip-Datei extrahiert, wenn dieses Argument nicht angegeben wird.
  • pwd : Wenn die Zip-Datei verschlüsselt ist, dann wird das Passwort in diesem Argument übergeben, Standard ist None.

Modul erforderlich :

from zipfile import ZipFile

Lassen Sie uns dies verwenden, um den gesamten Inhalt von Zip-Dateien zu extrahieren.

Extrahieren Sie alle Dateien aus einer Zip-Datei in das aktuelle Verzeichnis

Angenommen, wir haben eine Zip-Datei ’sample.zip‘. in unserem aktuellen Verzeichnis, sehen wir uns an, wie wir alle Dateien daraus extrahieren können.
Um sie zu entpacken, erstellen Sie zunächst ein ZipFile-Objekt, indem Sie die Zip-Datei im Lesemodus öffnen, und rufen Sie dann extractall() für dieses Objekt auf, d.h.

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

Es werden alle Dateien in der Zip-Datei im aktuellen Verzeichnis extrahiert. Wenn Dateien mit demselben Namen bereits am Extraktionsort vorhanden sind, werden diese Dateien überschrieben.

Alle Dateien aus einer Zip-Datei in ein anderes Verzeichnis extrahieren

Um alle Dateien aus der Zip-Datei in ein anderes Verzeichnis zu extrahieren, können wir den Zielort als Argument in extractall() übergeben. Der Pfad kann relativ oder absolut sein.

# 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')

Es werden alle Dateien in ’sample.zip‘ in den Temp-Ordner extrahiert.

Entpacken einiger Dateien aus einer großen Zip-Datei basierend auf einer Bedingung

Angenommen, wir haben eine sehr große Zip-Datei und benötigen einige wenige Dateien aus tausenden von Dateien im Archiv. Das Entpacken aller Dateien aus einer großen ZIP-Datei kann Minuten dauern. Aber wenn wir nur an ein paar der archivierten Dateien interessiert sind, dann können wir, anstatt die ganze Datei zu entpacken, auch eine einzelne Datei aus der ZIP-Datei extrahieren.

In Pythons zipfile-Modul bietet die ZipFile-Klasse eine Funktion, um eine einzelne Datei aus einer ZIP-Datei zu extrahieren,

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

Sie akzeptiert folgende Argumente:

  • member : Vollständiger Name der zu extrahierenden Datei. Es sollte einer aus der Liste der archivierten Dateinamen sein, die von ZipFile.namelist()
  • path : Ort, an dem die Zip-Datei extrahiert werden muss, wenn nicht angegeben, wird die Datei im aktuellen Verzeichnis extrahiert.
  • pwd : Wenn die Zip-Datei verschlüsselt ist, muss das Passwort in diesem Argument angegeben werden, Standard ist None.

Lassen Sie uns dies verwenden, um nur csv-Dateien aus einer Zip-Datei zu extrahieren, d.h.

# 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')

Es extrahiert nur csv-Dateien aus dem gegebenen Zip-Archiv.

Ein vollständiges Beispiel ist wie folgt,

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.