Pythonでディレクトリ(フォルダ)をzipやtarに圧縮

Pythonでディレクトリ(フォルダ)をまるごと一つのzipファイルに圧縮する場合、os.scandir()やos.listdir()でファイルのリストを作ってzipfileモジュールで圧縮する事もできるが、shutilモジュールのmake_archive()を使うほうが簡単。 zipのほかtarなど他のフォーマットにも対応しています。

11.10. shutil.make_archive() — Python 3.6.3 ドキュメント

zipfileモジュールを使ったzipファイルへの圧縮、zipファイルの解凍(展開)については

ディレクトリ(フォルダ)をzipに圧縮: shutil.make_archive()

第一引数base_nameには作成するzipファイルの名前(拡張子なし)、第二引数formatにはアーカイブフォーマットを指定します。 引数formatには、

'zip' 'tar' 'gztar' 'bztar' 'xztar'

が選択できます。 第三引数root_dirには圧縮するディレクトリのルートディレクトリのパス、第四引数base_dirには圧縮するディレクトリのroot_dirからの相対パスを指定します。どちらもデフォルトはカレントディレクトリ.。 base_dirを省略すると、root_dir全体が圧縮されます。 例えば、data/tempの中に以下の構造のディレクトリdirがあるとします。 dir ├── dir_sub │ └── test_sub.txt └── test.txt

import shutil

shutil.make_archive('data/temp/new_shutil', 'zip', root_dir='data/temp/dir')

base_dirを省略した上の設定で圧縮されたnew_shutil.zipは以下のように展開されます。 new_shutil ├── dir_sub │ └── test_sub.txt └── test.txt

続いて、base_dirにroot_dirの中のディレクトリを指定した場合です。

shutil.make_archive('data/temp/new_shutil_sub', 'zip', root_dir='data/temp/dir', base_dir='dir_sub')

上の設定で圧縮されたnew_shutil_sub.zipは以下のように展開されます。 dir_sub └── test_sub.txt

Last Updated: 6/26/2019, 10:34:03 PM