目的

pythonでzipファイルか否かをチェックする

環境

python3.6

解決策

判定方法は主に下記の2つになる

  • ファイル名の拡張子からの判定
  • バイナリファイルのヘッダ(識別子)から判定

ファイル名からの判定は手軽だが、アーカイブ情報を事前チェックする用途には適用出来ないため、はじめからバイナリで判定したほうが後々を考えると都合が良い
そのため、ここではバイナリ判定を行うことにした

zipfileモジュールを使わなくてもヘッダを読むだけなので、下記でも可能
ただしエラーハンドリングは必要だし、冗長になるので後述のzipfileモジュールを使う方法のが良いと思われる

input_file_path = "a.zip"

with open(input_file_path, "rb") as fd:
    if fd.read(2) == b"PK":
        // zipfile.
    else:
        // not zipfile.
import zipfile

input_file_path = "a.zip"

if zipfile.is_zipfile(input_file_path):
    // zipfile
else:
    // not zip file