ここでは、Pythonにおける「shutil.make_archive()」を用いたフォルダを圧縮する方法について解説しています。
この記事の対象
「shutil.make_archive()」の型
shutil.make_archive(base_name, format, root_dir)
「shutil.make_archive()」の基本的な引数は「base_name」にファイル・フォルダ名を指定します。「format」は圧縮形式を指定します。「root_dir」は圧縮するファイル・フォルダのパスを指定します。注意点はデフォルトではカレントディレクトリになります。
「shutil.make_archive()」 を用いた使用例
指定のフォルダを圧縮する方法
ダウンロードにある「test」というフォルダを同じディレクトリに圧縮フォルダを作成するプログラムです。
プログラム
import os
import shutil
#1---圧縮したいフォルダのパス
z_path = r"C:\hoge\hoge\Downloads\test"
#2---zipの作成
shutil.make_archive(z_path, 'zip', root_dir=z_path)
上記がプログラムになります。
それでは解説していきます。
#1---圧縮したいフォルダのパス
z_path = r"C:\hoge\hoge\Downloads\test"
1の部分では圧縮したいフォルダのパスを指定しています。
#2---zipの作成
shutil.make_archive(z_path, 'zip', root_dir=z_path)
2の部分ではzipの作成をしています。「 shutil.make_archive() 」内の「z_path」は圧縮した対象のフォルダを指定しています。「’zip’」はzip形式を指定しています。「root_dir」は圧縮したいフォルダの場所を指定しています。
結果
指定したフォルダが圧縮できていることが確認できました。
これを応用して複数のフォルダをそれぞれ圧縮するプログラムを考えてみます。
複数のフォルダをそれぞれ圧縮する方法
以下は、ダウンロードにある複数のフォルダをそれぞれドキュメントに圧縮するプログラムになります。
プログラム
import os
import glob
import shutil
#1---パス
z_path = r"C:\hoge\hoge\Downloads"
h_path = r"C:\hoge\hoge\Documents"
#2---folder情報取得
get_fnames = os.listdir(z_path)
#3---zip化
for i in get_fnames:
folder_name = h_path + "\\" +i
shutil.make_archive(folder_name, 'zip', root_dir=z_path)
上記がプログラムになります。
それでは解説していきます。
#1---パス
z_path = r"C:\hoge\hoge\Downloads"
h_path = r"C:\hoge\hoge\Documents"
1の部分で予めパスを指定しています。z_pathはzipに圧縮したいフォルダがあるパスを指定しています。h_pathは圧縮したフォルダの作成場所を指定しています。
#2---folder情報取得
get_fnames = os.listdir(z_path)
2の部分では圧縮したいフォルダの名前を「glob」で取得しています。
「glob」については以下をご参照下さい。
>>>「globを用いたファイル名の取得方法」
#3---zip化
for i in get_fnames:
folder_name = h_path + "\\" +i
shutil.make_archive(folder_name, 'zip', root_dir=z_path)
3の部分では「glob」で取得したフォルダ名を基にそれぞれ圧縮しています。
結果
ドキュメントにそれぞれ圧縮したフォルダが作成されていることが確認できました。