Python: Cum să creați o arhivă zip din mai multe fișiere sau directoare

În acest articol vom discuta despre cum să creăm o arhivă zip din fișiere selectate sau fișiere dintr-un director pe baza unor filtre.

Modulul zipfile din Python oferă o clasă ZipFile pentru chestii legate de fișierele zip. Să o folosim pentru a crea un fișier de arhivă zip.

Primul import al clasei din modul, adică.

from zipfile import ZipFile

Crearea unei arhive zip din mai multe fișiere în Python

Pasii sunt,

  • Crearea unui obiect ZipFile prin trecerea noului nume de fișier și a modului ca ‘w’ (write mode). Se va crea un nou fișier zip și se va deschide în cadrul obiectului ZipFile.
  • Apelarea funcției write() pe obiectul ZipFile pentru a adăuga fișierele în acesta.
  • Apelarea funcției close() pe obiectul ZipFile pentru a închide fișierul zip.

Se va crea un fișier zip ‘sample.zip’ cu fișierele date în interiorul acestuia.
Potem face același lucru cu „with open” . Acesta va închide automat fișierul zip atunci când obiectul ZipFile iese din domeniul de aplicare, adică.

Crearea unei arhive zip a unui director

Pentru a comprima tot conținutul unui director într-o arhivă zip, trebuie să parcurgem toate fișierele din director și subdirectoarele acestuia, apoi să adăugăm fiecare intrare în fișierul zip folosind 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))

Aceasta va comprima tot conținutul unui director într-un singur fișier zip, adică „sampleDir.zip”. Conținutul acestuia va fi,

Ziparea fișierelor selectate dintr-un director pe baza unui filtru sau a caracterelor sălbatice

Pentru a comprima fișierele selectate dintr-un director trebuie să verificăm condiția pentru fiecare cale de fișier în timpul iterației înainte de a le adăuga la fișierul zip.

Să creăm o funcție care să itereze un director și să filtreze conținutul cu un callback dat. Fișierele care trec de filtru vor fi adăugate doar în zip, adică.

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

Să comprimăm doar fișierele csv dintr-un director, adică să trecem o funcție lambda ca argument în ea.

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

Se va crea o arhivă zip ‘sampleDir2.zip’ cu toate fișierele csv din directorul dat.

Exemplul complet este următorul:

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.