Python: Jak utworzyć archiwum zip z wielu plików lub Katalogu

W tym artykule omówimy, jak utworzyć archiwum zip z wybranych plików lub plików z katalogu na podstawie filtrów.

Moduł zipfile Pythona zapewnia klasę ZipFile do rzeczy związanych z plikami zip. Użyjmy tego do utworzenia pliku archiwum zip.

Najpierw zaimportujmy klasę z modułu i.e.

from zipfile import ZipFile

Utwórz archiwum zip z wielu plików w Pythonie

Kroki są następujące,

  • Utwórz obiekt ZipFile, przekazując nazwę nowego pliku i tryb jako 'w’ (tryb zapisu). To utworzy nowy plik zip i otworzy go w obiekcie ZipFile.
  • Wywołaj funkcję write() na obiekcie ZipFile, aby dodać do niego pliki.
  • Wywołaj funkcję close() na obiekcie ZipFile, aby zamknąć plik zip.

To utworzy plik zip 'sample.zip’ z podanymi plikami wewnątrz niego.
Możemy zrobić to samo z „with open” . To automatycznie zamknie plik zip, gdy obiekt ZipFile wyjdzie poza zakres, tj.

Tworzenie archiwum zip katalogu

Aby zarchiwizować całą zawartość katalogu w archiwum zip, musimy wykonać iterację po wszystkich plikach w katalogu i jego podkatalogach, a następnie dodać każdy wpis do pliku zip za 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))

Zapakuje całą zawartość katalogu do pojedynczego pliku zip, tj. 'sampleDir.zip’. Jego zawartość będzie następująca:

Zapakuj wybrane pliki z katalogu na podstawie filtru lub symboli wieloznacznych

Aby zapakować wybrane pliki z katalogu, musimy sprawdzić warunek na każdej ścieżce pliku podczas iteracji przed dodaniem go do pliku zip.

Utwórzmy funkcję, która iteruje po katalogu i filtruje zawartość z podanym wywołaniem zwrotnym. Pliki, które przejdą przez filtr zostaną dodane do zip’a.

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

Zapipujmy tylko pliki csv z katalogu, tj. przekażmy funkcję lambda jako argument.

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

Tworzy ona archiwum zip 'sampleDir2.zip’ z wszystkimi plikami csv z danego katalogu.

Kompletny przykład jest następujący:

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.