note.nkmk.me

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

Date: 2018-02-04 / tags: Python, ファイル操作
このエントリーをはてなブックマークに追加

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

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_dirroot_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
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事