はじめに
ファイルを社外に送るとき、「パスワード付き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化する応用も簡単にできます。
「作るのが楽しい × 業務にも使える」そんな小ネタスクリプトでした!



コメント