Python: Hoe maak je een zip-archief van meerdere bestanden of Directory

In dit artikel zullen we bespreken hoe je een zip-archief te maken van geselecteerde bestanden of bestanden uit een directory op basis van filters.

Python’s zipfile module biedt een ZipFile klasse voor zip-bestand gerelateerde dingen. Laten we deze gebruiken om een zip-archiefbestand te maken.

Eerst importeren van de klasse van de module i.e.

from zipfile import ZipFile

Maak een zip-archief van meerdere bestanden in Python

stappen zijn,

  • Maak een ZipFile-object door de nieuwe bestandsnaam en de modus als ‘w’ (schrijfmodus) op te geven. Het zal een nieuw zip-bestand te maken en te openen binnen ZipFile object.
  • Call write() functie op ZipFile object om de bestanden toe te voegen in het.
  • call close() op ZipFile object om het zip-bestand te sluiten.

Het zal een zip-bestand ‘sample.zip’ te maken met de gegeven bestanden erin.
We kunnen hetzelfde doen met “met open” . Het zip-bestand wordt automatisch gesloten wanneer het ZipFile-object buiten het bereik komt, d.w.z.

Een zip-archief van een directory maken

Om de volledige inhoud van een directory in een zip-archief in te zippen, moeten we alle bestanden in de directory en de submappen ervan doorlopen en vervolgens elk bestand aan het zip-bestand toevoegen met ZipFile.write()

from zipfile import ZipFileimport osfrom os.path import basename# create a ZipFile objectwith ZipFile('sampleDir.zip', 'w') as zipObj: # Iterate over all the files in directory for folderName, subfolders, filenames in os.walk(dirName): for filename in filenames: #create complete filepath of file in directory filePath = os.path.join(folderName, filename) # Add file to zip zipObj.write(filePath, basename(filePath))

Hiermee wordt de volledige inhoud van een directory in een enkel zip-bestand gezipt, d.w.z. ‘sampleDir.zip’. De inhoud zal zijn,

Selecteer bestanden uit een directory op basis van filter of jokertekens

Om geselecteerde bestanden uit een directory te zippen, moeten we de voorwaarden voor elk bestandspad tijdens de iteratie controleren voordat het aan het zipbestand wordt toegevoegd.

Laten we een functie maken die over een directory itereert en de inhoud filtert met de gegeven callback. Bestanden die aan het filter voldoen, worden alleen aan de zip toegevoegd.

from zipfile import ZipFileimport osfrom os.path import basename# Zip the files from given directory that matches the filterdef zipFilesInDir(dirName, zipFileName, filter): # create a ZipFile object with ZipFile(zipFileName, 'w') as zipObj: # Iterate over all the files in directory for folderName, subfolders, filenames in os.walk(dirName): for filename in filenames: if filter(filename): # create complete filepath of file in directory filePath = os.path.join(folderName, filename) # Add file to zip zipObj.write(filePath, basename(filePath))

Laten we alleen csv-bestanden uit een directory zippen, d.w.z. laten we een lambda-functie als argument opgeven.

zipFilesInDir('sampleDir', 'sampleDir2.zip', lambda name : 'csv' in name)

Er wordt een zip-archief ‘sampleDir2.zip’ gemaakt met alle csv-bestanden uit de opgegeven directory.

Het volledige voorbeeld ziet er als volgt uit:

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.