Pythonでフォルダごとにzip!



どうも、shirokumaです。

どうやら最近はPython系キーワード経由でのアクセスが多いので、ちょっと寄せてみます。

Python初心者が動くからOKとするプログラム。体裁は気にしない。

さて、今回はフォルダ毎に圧縮したい場合。

フォルダを一つ選んで圧縮する、次を選んで圧縮する、ということはしばしばあると思いますが、その数が膨大になるといちいちマニュアルでやってられませんよね。

かといって、複数のフォルダを一つのフォルダに入れて丸ごと圧縮すると、いざ解凍するときに不便かもしれません。Windowsだったら意識的に解凍しなくてもフォルダの中が見れる、コピーできるというツッコミはこの際置いておきましょう。

今回は親フォルダの中にある複数のサブフォルダをサブフォルダ毎にzip化するコードです。

まぁ、もちろん似たようなコードは山のようにネットに落ちていますが、できるだけ短くをモットーにお伝えします。ちなみにPythonは3.6系で使ってます。

import os

import zipfile

FolderPath = r’ /Users/UserName/Desktop/ziptest/ ‘

Directories=[]

for x in os.listdir(FolderPath):

if  os.path.isdir(FolderPath + x):

Directories.append(FolderPath +x)

for Direcs in Directories:

zf =zipfile.ZipFile(Direcs + ‘.zip’ , ‘w’, zipfile.ZIP_DEFLATED)

for root, dirs, files in os.walk(Direcs):

for file in files:

zf.write(Direcs + “/’ + file, file)

zf.close()

print (Direcs + ‘  Complete ! ‘)

ブログだとスペースが自動で削除されてしまうので、いい感じでスペースをいれてください。

Pythonはスペースで文法を認識するので、例えば少なくともfor の次の1行は1字以上下げる必要があります。

下げるべきところと下げてはいけないところは、下の解説も参考に考えてみてください。

さて、解説。

まずimportで必要なpackageをもってきます。

FolderPathに親フォルダのアドレスをいれます。Macだと ‘/’ でいけましたが、Windowsだと’¥’とか、特に先頭は’¥¥’とか使わないといけないかもしれません。

それでもってはじめのfor文でDirectoriesを検索してFolderPathのなかにディレクトリがあればAppendします。

そうすると圧縮したいサブフォルダがDirectoriesに格納されます。

次のfor文はDirectoriesに格納されているサブフォルダがある限り繰り返します。for in でこんな書き方ができるのがpythonのいいところ。

さてfor文の中は、Directoriesのあるサブフォルダ(Direcs)に対してその中身の情報を、importしたzipfileの機能を使って、圧縮して書き込む、という処理をしています。言い換えればサブフォルダの中身を全て検索して、一つずつ書き込んでいるわけです。

最後にcloseで書き込みを終了させます。途中経過を見やすくするため一応print文をつけました。そして次のDirecsにいくわけです。

はい。そんなに難しくはないですね。割とシンプルでわかりやすいのではないでしょうか。

短いコードですし、一応動作確認もしたので問題ないと思いますが、基本は自己責任でお願いしますね。

今回はPythonで一度に複数のzipファイルを作成するソースをお届けしました。参考になれば幸い。

あと、サンクスボタンやいいねボタンなどを配置してみましたので、ここまで読みました!ってことでポチっとやっていただければ、非常にモチベーションが上がりますので、どうぞよろしくお願い致します。

 

 

コメントを残す

iDeCo   東京ザナドゥ   布団乾燥機   ノーリツ鋼機   Suica   ファルまろ   Line Pay   排気がきれい   丸戸史明   Parallels   アイスストッカー   MP300   ビッグオーダー   Marantz   エックスサーバー   moppy   ひかりTVショッピング   ガチャ   エアリズム   SONOS   下着   Xperia XZ3 Compact   R6300   zaif   13インチ   転職   ハーベスト  
トップへ戻る