Python: Come creare un archivio zip da più file o directory

In questo articolo discuteremo come creare un archivio zip da file selezionati o da file di una directory basati su filtri.

Il modulo zipfile di Python fornisce una classe ZipFile per cose relative ai file zip. Usiamo questo per creare un file archivio zip.

Prima importa la classe dal modulo cioè.

from zipfile import ZipFile

Crea un archivio zip da più file in Python

I passi sono,

  • Crea un oggetto ZipFile passando il nome del nuovo file e la modalità come ‘w’ (modalità scrittura). Creerà un nuovo file zip e lo aprirà all’interno dell’oggetto ZipFile.
  • Chiamo la funzione write() sull’oggetto ZipFile per aggiungere i file in esso.
  • Chiamiamo close() sull’oggetto ZipFile per chiudere il file zip.

Creerà un file zip ‘sample.zip’ con i file dati al suo interno.
Possiamo fare la stessa cosa con “with open”. Chiuderà automaticamente il file zip quando l’oggetto ZipFile esce dallo scopo, cioè

Crea un archivio zip di una directory

Per comprimere tutto il contenuto di una directory in un archivio zip, dobbiamo iterare tutti i file nella directory e le sue sotto directory, quindi aggiungere ogni voce al file zip usando 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))

Compatterà tutto il contenuto di una directory in un singolo file zip, cioè ‘sampleDir.zip’. Il suo contenuto sarà,

Zip file selezionati da una directory basati su filtri o caratteri jolly

Per zippare i file selezionati da una directory abbiamo bisogno di controllare la condizione su ogni percorso del file durante l’iterazione prima di aggiungerlo al file zip.

Creiamo una funzione che Itera su una directory e filtra il contenuto con una callback data. I file che passano il filtro saranno aggiunti solo nello zip cioè

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

Compiliamo solo i file csv da una directory cioè passiamo una funzione lambda come argomento in essa.

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

Creerà un archivio zip ‘sampleDir2.zip’ con tutti i file csv da data directory.

L’esempio completo è il seguente:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.