Python:

V tomto článku se budeme zabývat tím, jak vytvořit archiv zip z vybraných souborů nebo souborů z adresáře na základě filtrů.

Modul zipfile v Pythonu poskytuje třídu ZipFile pro věci související se soubory zip. Použijme ji k vytvoření archivního souboru zip.

Nejprve importujte třídu z modulu, tj.

from zipfile import ZipFile

Vytvoření archivu zip z více souborů v jazyce Python

Kroky jsou následující,

  • Vytvořte objekt ZipFile předáním názvu nového souboru a režimu jako ‚w‘ (režim zápisu). Vytvoří nový soubor ZIP a otevře jej v objektu ZipFile.
  • Voláním funkce write() na objektu ZipFile do něj přidáme soubory.
  • voláním funkce close() na objektu ZipFile zavřeme soubor ZIP.

Vytvoří soubor ZIP ‚sample.zip‘ s danými soubory uvnitř.
Též můžeme provést pomocí funkce „with open“ . Soubor zip se automaticky uzavře, když objekt ZipFile opustí obor, tj.

Vytvoření archivu zip adresáře

Chceme-li zazipovat celý obsah adresáře do archivu zip, musíme iterovat všechny soubory v adresáři a jeho podadresářích a pak přidat každou položku do souboru zip pomocí 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))

To zazipuje celý obsah adresáře do jednoho souboru zip, tj. ‚sampleDir.zip‘. Jeho obsah bude,

Zipovat vybrané soubory z adresáře na základě filtru nebo zástupných znaků

Pro zazipování vybraných souborů z adresáře musíme při iteraci kontrolovat podmínku na každé cestě k souboru před jeho přidáním do souboru zip.

Vytvoříme funkci, která bude iterovat nad adresářem a filtrovat obsah pomocí daného zpětného volání. Soubory, které projdou filtrem, budou přidány pouze do zipu, tj.

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

Zipujme pouze csv soubory z adresáře, tj. předejme jí jako argument lambda funkci.

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

Vytvoří zip archiv ‚sampleDir2.zip‘ se všemi csv soubory z daného adresáře.

Kompletní příklad je následující:

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.