[小ネタ]Pythonでパスワード付きZIPファイルを解凍してみる

2021.01.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部のkobayashiです。

PythonスクリプトでパスワードのかかったZIPファイルを解凍する必要があり、Python標準ライブラリのzipfileモジュールを使用してみましたのでその内容をまとめます。

環境

  • Python 3.7.4

zipfileモジュール

zipfileモジュールはPython標準ライブラリです。このモジュールはZIP 形式のファイルの作成、読み書き、追記、書庫内のファイル一覧の作成といったzipファイルに関するあらゆる操作が行なえます。

zipfile --- ZIP アーカイブの処理 — Python 3.7.9 ドキュメント

それでは早速パスワード付きZIPファイルを解凍するスクリプトを作成します。

zipfileモジュールでパスワード付きZIPファイルを解凍する

使うのはZipFileクラスのextractallメソッドです。 これを使って、test.zipというパスワード保護されたZIPファイルを解答するスクリプトは以下の通りになります。

import zipfile

filename = "./tmp/test.zip"
path = "./tmp/"
passwd = "testpass"
with zipfile.ZipFile(filename, "r") as zp:
    try:
        zp.extractall(path=path, pwd=passwd.encode("utf-8"))
        print("The extract is complete.")
    except RuntimeError as e:
        print(e)

とても短いスクリプトなので解説もほとんど必要ないと思いますが、一応要点だけ解説します。

  • 1行目:zipfileモジュールを読み込む
  • 6行目:with文を使ってZipFileオブジェクトを取得する
  • 7行目:try文で解凍するパスワードが違った際にエラーをcatchする
  • 8行目:パスワード文字列をencodeでbytes型(utf-8)に変換する

因みにパスワードがかかっていないZIPファイルの場合は単純にextractallメソッドのpwdを空にすれば良いだけです。

以上のように非常に簡単にパスワード付きのZIPファイルの解凍が行えます。

まとめ

新年1本目のブログですが、それほど気合が入っていない小ネタになってしまいました。 ただZIPファイルをPythonスクリプト中で解凍し後続の処理で扱う場面も少なからずあるかと思います。

最後まで読んで頂いてありがとうございました。