はじめに
ファイルを社外に送るとき、「パスワード付きZIPにしてね」って言われること、よくありますよね。でも、毎回右クリックからZIP化して、パス付けて…ってめんどう!
この記事では、Pythonでパスワード付きZIPファイルを自動作成するスクリプトを紹介します。
メール送信はナシ!まずはZIPの自動化だけに絞って、最小構成でサクッと作っていきます。
やりたいこと
-
指定したファイルをZIP形式に圧縮
-
ZIPファイルにパスワードをつける
-
出力先フォルダに自動保存
(+ 必要に応じてメール送信などの処理を後で追加できる設計)
準備するもの
ライブラリ
インポート不要で使用することができます
-
shutil
(標準) -
subprocess
(標準) -
os
(標準)
このライブラリの説明
ライブラリ | 用途 |
---|---|
shutil |
ファイルやディレクトリ操作、ZIP作成 |
subprocess |
システムコマンドの実行(今回はzipコマンド) |
os |
パス操作など基本操作 |
ディレクトリ構成
zip_creator/ ├── main.py ├── send_file/ │ └── sample.csv └── sent_zips/ └── (ここにZIPが出力される)
コードスクリプト
コードスクリプトの概要
-
指定したファイルをZIP化
-
zip -P
コマンドでパスワードを付与 -
出力先に保存
main.py
import os import subprocess # --- 設定 --- file_to_zip = 'send_file/sample.csv' output_zip = 'sent_zips/sample_protected.zip' zip_password = 'secret123' # --- 実行 --- def create_password_zip(input_file, output_path, password): # zipコマンドが使えるか確認(Linux/Mac想定) if not shutil.which('zip'): raise EnvironmentError("zipコマンドが使えません。インストールされているか確認してください。") # zipコマンド実行 subprocess.run(['zip', '-j', '-P', password, output_path, input_file], check=True) print(f'ZIP作成成功: {output_path}') create_password_zip(file_to_zip, output_zip, zip_password)
Windows版のスクリプト
main.py
import pyminizip import os file_to_zip = 'send_file/sample.csv' output_zip = 'sent_zips/sample_protected.zip' password = 'secret123' compression_level = 5 # 1〜9 def create_password_zip(input_file, output_file, password, level): pyminizip.compress(input_file, None, output_file, password, level) print(f'ZIP作成成功: {output_file}') create_password_zip(file_to_zip, output_zip, password, compression_level)
実行結果
-
sent_zips/
フォルダ内にsample_protected.zip
が作成されます -
パスワード付きで、受け取った側は解凍時にパスを求められます
コード解説
-
zip -j
→ フォルダ構造を含めず、ファイルだけを圧縮 -
-P
オプション → パスワードを直接指定 -
subprocess.run()
でコマンド実行 -
Windows環境では別対応(後述)
注意点
-
このスクリプトはLinux / Mac向けです(
zip
コマンド前提)。 -
Windows環境では
7z
コマンドなど別アプローチが必要。 -
セキュリティ的には
-P
での平文パス指定は推奨されないので、実運用では注意。 -
複数ファイルの圧縮にも対応できます(ファイルリストを渡すだけ)
まとめ
面倒なZIP作業も、Pythonで数行書くだけで一発自動化!
メール送信機能をあとから追加したり、フォルダごとZIP化する応用も簡単にできます。
「作るのが楽しい × 業務にも使える」そんな小ネタスクリプトでした!
コメント