いつも手動でやっているファイルの圧縮を自動でしたいんだけど、
圧縮したいファイルが大量にある…。
Pythonで大量のファイルを圧縮できないの?
できます!
「複数のファイルをzip形式で圧縮する方法」
をできるだけわかりやすく解説いたします!
【著者情報】
Python歴3年。
入社2年目の春に先輩が突然トンズラし、業務を半分肩代わりするハメに…。
今までの1.5倍の仕事をこなせるはずもなく、苦しむ毎日。
業務効率化を模索中にPythonと出合う。
業務とPythonの相性が良く、2倍以上の効率化を実現。現在も効率化を進行中。
[Python]複数のファイルをzip形式で圧縮するには
「zipfile」と簡単なfor文を使います。まずは実行見本をどうぞ。
実行見本
「Utatane」フォルダ内の全ファイルを圧縮
全コード
import zipfile
import os
import glob
os.chdir('C:/Utatane')
files = glob.glob('*.*')
zf = zipfile.ZipFile('input.zip', 'w', compression = zipfile.ZIP_DEFLATED)
for file in files :
zf.write(file)
zf.close()
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
手順は下記のとおりです。
- (インポート)
- 圧縮したいファイルが存在するフォルダへ移動
- ファイル一覧を取得
- 圧縮ファイルを作成
- 複数のファイルを圧縮して閉じる
インポート
import zipfile
import os
import glob
上記のように、3つインポートを行います。
用途は下記のとおりです。
- zipfile:ファイルを圧縮するのに必要
- os:特定のフォルダへ移動するのに必要
- glob:ファイル一覧を取得するのに必要
特定のフォルダへ移動するのに必要
os.chdir('C:/Utatane')
上記一文を記述することで、圧縮したいファイルが存在する「Utatane」フォルダへ移動することができます。
フォルダ自体を移動させているわけではないのでご注意ください。
わかりやすく説明すると、手動で圧縮する時のように「Utataneフォルダを見に行って開いている」というような解釈でOKです。
ファイル一覧を取得
files = glob.glob('*.*')
上記一文にて、「Utatane」フォルダ内のファイル一覧を取得(圧縮するファイル一覧を取得)しています。
「(‘*.*’)」を「(‘*.jpg’)」に変更すると、フォルダ内にあるjpgファイルのみを取得できます。
globについては下記記事をご参考ください。
圧縮ファイルを作成
zf = zipfile.ZipFile('input.zip', 'w', compression = zipfile.ZIP_DEFLATED)
上記記述にて、空っぽのzipファイルを作成しています。
詳細は下記記事にて解説しておりますので、ご参考ください。
複数のファイルを圧縮して閉じる
for file in files :
zf.write(file)
zf.close()
8行目で作成した空っぽのzipファイルに、圧縮するファイルを入れています。
(for文を利用して、ファイル一覧(files)が無くなるまで追加)
for文については下記記事をご参考ください。
13行目でzipファイルを閉じて終了です。
圧縮後におすすめすること
ファイルの圧縮が完了したら、元ファイルを削除することで、ストレージ容量の削減になります。
ファイルを削除する方法は下記記事をご参考ください。
削除するのがちょっと怖い場合は、元ファイルを別のストレージに移動するのも有効です。
ファイルを移動する方法は下記記事にて解説しております。
最後に
Pythonで複数のファイルをzip形式で圧縮する方法を解説いたしました。
数百枚を超える大量の重いファイルは、保存する際に圧縮するのがベターです。
大量のファイルを操作する際は、ついでに圧縮してしまいましょう。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!