Navigation

Related Articles

Back to Latest Articles

フォルダ内のファイルを複数毎にzip形式に圧縮


press
フォルダ内のファイルを複数毎にzip形式に圧縮

フォルダ内のファイルを複数毎にzip形式に圧縮

ファイルをまとめてzip形式に圧縮してしまうと容量が増えてしまうので、メールなどで送るために複数個に分けて圧縮ファイルを作りたいときがあります。ファイル数がそれほど多くないときは手動でも対応できますが、ファイル数が多い場合は自動化すると作業を効率化できます。

開発環境

$ python -V
Python 3.7.0

$ tree
├── archive.py
├── files
└── zip

コード

import datetime
import glob
import zipfile
from time import sleep

zip_cnt = 0
for filename in sorted(glob.glob("files/*.jpg")):
    if zip_cnt == 0:
        dt = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
        zip_name = 'zip/' + dt + '.zip'

        zip_files = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
        zip_files.write(filename)
        zip_cnt += 1

    elif zip_cnt == 5:
        zip_files.close()
        zip_cnt = 0
        sleep(1)

    else:
        zip_files.write(filename)
        zip_cnt += 1

if not zip_files.close():
    zip_files.close()
else:
    pass

print('圧縮が終わりました。')

解説

import datetime
import glob
import zipfile
from time import sleep
モジュールを読み込む

zip_cnt = 0
カウント用の変数を作ります

for filename in sorted(glob.glob("files/*.jpg")):
filesフォルダ内の拡張子がjpgファイルを読み込む(*はワイルドカードで全てのjpgファイルが対象)

dt = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
圧縮ファイルのネーミング用に現在時刻を取得

zip_name = 'zip/' + dt + '.zip'
圧縮ファイルの名前を作成(生成した圧縮ファイルはzipフォルダに格納)

zip_files = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
zip形式の圧縮ファイルを生成(圧縮する場合は第三引数に‘ZIP_DEFLATED’を指定)

zip_files.write(filename)
生成した圧縮にファイルに読み込んだファイルを追加

zip_cnt += 1
カウントに追加

elif zip_cnt == 5:
ファイルを5件ごと圧縮するので5に設定

zip_files.close()
圧縮ファイルをクローズ

補足

圧縮する件数が少ないと一秒間に複数回処理が行われてしまい、圧縮ファイルが正常に書き出されないので、圧縮ファイルをクローズした後にsleep(1)で一秒間スリープさせています。


当ブログは、群馬県でPython / Djangoを中心にウェブアプリケーションを開発している株式会社ファントムが運営しています。

投稿についてのお問い合わせ




Show Comments (0)

Comments

Related Articles

Python

変換できない文字が混ざった文字列をShift-JISに変換する

テキストファイルやCSVファイルに書き出す時に文字コードをShift-JISに指定して書き出すとエラーになる場合があります。よく見るのが、-や を変換した時に出るエラーで\uff0dや\xa0と表示されます。 […]

Posted on by press
Python

名前に現在時刻を入れたファイルが連番かどうか判定(後半)

名前に現在時刻を入れたファイルが連番かどうか判定(後半) 前回からの続きです。 前回は連番になっていたらまとめてリスト化しましたが、今回はまとめたファイルを動画に変換して書き出します。 コードはGitHubリポジトリにあ […]

Posted on by press