Python: 複数のファイルまたはディレクトリから zip アーカイブを作成する方法

この記事では、フィルターに基づいて選択したファイルまたはディレクトリのファイルから zip アーカイブを作成する方法を説明します。

Python の zipfile モジュールは zip ファイル関連のものを提供する ZipFile クラスを提供します。

from zipfile import ZipFile

Create a zip archive from multiple files in Python

Steps are,

  • 新しいファイル名とモードを ‘w’ (write mode) として渡して ZipFile オブジェクトを作成します。
  • ZipFile オブジェクトの write() 関数を呼び出してファイルを追加します。
  • ZipFile オブジェクトの close() 関数を呼び出して Zip ファイルを閉じます。

    Create a zip archive of a directory

    ディレクトリの内容をすべてzipアーカイブにするためには、ディレクトリとそのサブディレクトリにあるすべてのファイルを繰り返し処理し、ZipFile.Zipを使ってそれぞれのエントリをzipファイルに追加する必要があります。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))

    これは、ディレクトリのすべての内容を一つの zip ファイル、すなわち ‘sampleDir.zip’ に zip 化するものです。 その内容は、

    フィルタまたはワイルドカードに基づいて、ディレクトリから選択したファイルを圧縮する

    ディレクトリから選択したファイルを圧縮するために、圧縮ファイルに追加する前に、各ファイルパスの条件をチェックする必要があります

    ディレクトリを繰り返し処理し、与えられたコールバックでコンテンツをフィルタする機能を作成しましょう。

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

    あるディレクトリから csv ファイルだけを zip してみましょう。

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

    これは、与えられたディレクトリからすべての csv ファイルを含む zip アーカイブ ‘sampleDir2.zip’ を作成します。

コメントを残す

メールアドレスが公開されることはありません。