目的
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