Python: How to unzip a file | Extract Single, multiple or all files from a ZIP archive

In dit artikel zullen we verschillende manieren bespreken om enkele, meerdere of alle bestanden uit te pakken uit een zip-archief naar de huidige of een andere map.

In de zipfile-module van Python biedt de klasse ZipFile een functie om de volledige inhoud van een ZIP-archief uit te pakken,

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

Het accepteert de volgende argumenten :

  • path : locatie waar het zip-bestand moet worden uitgepakt, indien niet opgegeven zal het de inhoud in de huidige directory uitpakken.
  • members : lijst van bestanden die moeten worden uitgepakt. Alle bestanden in de zip worden uitgepakt als dit argument niet wordt opgegeven.
  • pwd : Als het zip-bestand is gecodeerd, geef dan het wachtwoord op in dit argument, standaard is dit Geen.

Module vereist :

from zipfile import ZipFile

Laten we dit gebruiken om de volledige inhoud van zip-bestanden uit te pakken.

Alle bestanden uit een zip-bestand uitpakken naar de huidige directory

Voorstel dat we een zip-bestand ‘sample.zip’ in onze huidige directory hebben, laten we eens kijken hoe we alle bestanden eruit kunnen halen.
Om het zip-bestand uit te pakken, maken we eerst een ZipFile-object aan door het zip-bestand in leesmodus te openen en vervolgens extractall() op dat object aan te roepen, d.w.z.

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

Hiermee worden alle bestanden in de zip uitgepakt in de huidige directory. Als bestanden met dezelfde naam al op de extractielocatie aanwezig zijn, worden deze overschreven.

Alle bestanden uit een zip-bestand in een andere directory uitpakken

Om alle bestanden uit een zip-bestand in een andere directory uit te pakken, kunnen we de bestemmingslocatie als argument in extractall() opgeven. Het pad kan relatief of absoluut zijn.

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

Het zal alle bestanden in ‘sample.zip’ in de tijdelijke map uitpakken.

Extraheer enkele bestanden uit een groot zip-bestand op basis van voorwaarde

Stel dat we een heel groot zip-bestand hebben en we hebben enkele bestanden nodig uit duizenden bestanden in het archief. Het uitpakken van alle bestanden uit een grote zip kan minuten duren. Maar als we alleen geïnteresseerd zijn in een paar gearchiveerde bestanden, kunnen we in plaats van het hele bestand uit te pakken ook een enkel bestand uit het zip-bestand extraheren.

In de zipfile-module van Python biedt de ZipFile-klasse een functie om een bestand uit een ZIP-bestand te extraheren,

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

Het accepteert de volgende argumenten :

  • member : volledige naam van het bestand dat moet worden uitgepakt. Dit moet er een zijn uit de lijst van gearchiveerde bestandsnamen die door ZipFile.namelist()
  • path : locatie waar het zip-bestand moet worden uitgepakt, indien niet opgegeven wordt het bestand uitgepakt in de huidige directory.
  • pwd : Als het zip-bestand is gecodeerd, geef dan het wachtwoord op in dit argument, standaard is dit Geen.

Laten we dit gebruiken om alleen csv-bestanden uit te pakken uit een zip-bestand, d.w.z.

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

Het zal alleen csv-bestanden uitpakken uit een gegeven zip-archief.

Volledig voorbeeld is als volgt,

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

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.