Python:

Ebben a cikkben arról lesz szó, hogyan hozhatunk létre zip-archívumot szűrők alapján kiválasztott fájlokból vagy egy könyvtárból származó fájlokból.

A python zipfile modulja egy ZipFile osztályt biztosít a zip-fájlokkal kapcsolatos dolgokhoz. Használjuk ezt egy zip archív fájl létrehozásához.

Először importáljuk az osztályt a modulból, azaz

from zipfile import ZipFile

Create a zip archive from multiple files in Python

Steps are,

  • Create a ZipFile object by passing the new file name and mode as ‘w’ (write mode). Létrehoz egy új zip fájlt és megnyitja a ZipFile objektumon belül.
  • Hívja a write() függvényt a ZipFile objektumon a fájlok hozzáadásához.
  • Hívja a close() függvényt a ZipFile objektumon a zip fájl bezárásához.

Ez létrehoz egy ‘sample.zip’ zip fájlt a megadott fájlokkal benne.
Meg tudjuk csinálni ugyanezt a “with open” . Automatikusan bezárja a zip-fájlt, amikor a ZipFile objektum kikerül a hatóköréből, azaz.

Create a zip archive of a directory

Egy könyvtár összes tartalmának zip-archívumba való zipeléséhez a könyvtárban és annak alkönyvtáraiban lévő összes fájlon végig kell mennünk, majd a ZipFile segítségével minden egyes bejegyzést hozzá kell adnunk a zip-fájlhoz.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))

Ez egy könyvtár összes tartalmát egyetlen zip-fájlba, azaz a ‘sampleDir.zip’-be fogja zipelni. Tartalma a következő lesz,

Kiválasztott fájlok zipelése egy könyvtárból szűrő vagy vadkártyák alapján

A könyvtárból kiválasztott fájlok zipeléséhez az iteráció során ellenőriznünk kell az egyes fájlok útvonalának feltételét, mielőtt hozzáadnánk őket a zip fájlhoz.

Készítsünk olyan függvényt, amely egy könyvtáron iterál és a tartalmat adott visszahívással kiszűri. Csak azok a fájlok kerülnek bele a zip-be, amelyek átmennek a szűrőn.

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

Csomagoljuk csak a csv fájlokat egy könyvtárból, azaz adjunk át egy lambda függvényt argumentumként.

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

Ez létrehoz egy ‘sampleDir2.zip’ zip archívumot a megadott könyvtár összes csv fájljával.

A teljes példa az alábbi:

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.