【Python】特定のファイルをアーカイブする

機能

特定のファイルをアーカイブするPythonプログラムです。

例えば、以下のコマンドを実行するとinputフォルダ配下にあるテキストファイル(.txt)をzipファイルにまとめます。

サブフォルダも検索対象です。

python file2zip.py .txt input

サンプル動画

youtu.be

プログラム

#! Python3
# 機能
#  特定のファイルをアーカイブする
# 使い方
#  1.Pythonを実行する
# 実行コマンド
#  python file2zip.py キーワード 検索パス
#  python file2zip.py .txt input
#  python file2zip.py テスト input

import os
import sys
import zipfile
import datetime

if len(sys.argv) != 3:
    sys.exit("使い方:python file2zip.py キーワード 検索パス")

keyword = sys.argv[1]
search_path = sys.argv[2]

# ファイル名:検索パス_システム日付(yyyymmdd).zip
sysdate = datetime.date.today().strftime("%Y%m%d")
zip_file_name = "{}_{}.zip".format(os.path.basename(search_path), sysdate)
print("Creating {}...".format(zip_file_name))

with zipfile.ZipFile(zip_file_name, "w") as zip_file:
    for folder_name, _, file_names in os.walk(search_path):
        # フォルダを追加する
        print("Adding files in {}...".format(folder_name))
        zip_file.write(folder_name)

        for file_name in file_names:
            # キーワードが含まれないファイルは対象外
            if keyword.lower() not in file_name.lower():
                continue

            # ファイルを追加する
            print("Adding file {}...".format(file_name))
            zip_file.write(os.path.join(folder_name, file_name))

使い方

  1. Pythonを実行する

コマンド

実行コマンド

python file2zip.py キーワード 検索パス
python file2zip.py .txt input
python file2zip.py テスト input

パスは相対パスでも絶対パスでも指定可能です。

実行環境

プログラム実行時の環境は以下になります。

開発環境については以下を参考にして下さい。

stmtk358.hatenablog.com

プログラムのバッチ化については以下を参考にして下さい。

stmtk358.hatenablog.com

exeファイル

Python環境がなくても実行可能なexeファイルもあります。

とりあえず試してみたい方は以下からダウンロードして下さい。

github.com

実行方法

コマンドラインから以下のコマンドを実行して下さい。

file2zip.exe キーワード 検索パス
file2zip.exe .txt input
file2zip.exe テスト input

GitHub

今回使用したプログラムやテストデータはGitHubにアップロードしています。

github.com

参考文献

www.oreilly.co.jp