この記事は?
Exiftool (及びそのラッパー) を用いて、Python でファイルのメタデータを取得する方法です。
Exiftool というは、様々なファイルのメタデータの取得や書き込みができるコマンドラインツールです。
この記事では、読み込み方法にだけ触れており、書き込み方法には触れておりません。
pyexiftool
で取得
pip install pyexiftool
from exiftool import ExifTool
with ExifTool() as et:
data = et.get_metadata("<FileName>")
# data: dict型
# 必要に応じて dict型のメソッドを用いてデータ取得
print(data.get("File:FileName"))
複数ファイルを一度に指定することもできます。
from exiftool import ExifTool
with ExifTool() as et:
data = et.get_metadata_batch(["<File1>", "<File2>"])
# data : list型
# data[n]: dict型
特定のタグのみを取得することもできます。
from exiftool import ExifTool
with ExifTool() as et:
data = et.get_tag("File:FileName", "<FileName>")
# data : str型
data = et.get_tags(["File:FileName", "File:FileType"], "<FileName>")
# data : dict型
# get_tag_batch, get_tags_batch で上記同様に複数ファイル指定も可能
参考:
pyexifinfo
で取得
pip install pyexifinfo
from pyexifinfo import information
data = information("<FileName>")
# data: dict型
# 必要に応じて dict型のメソッドを用いてデータ取得
print(data.get("File:FileName"))
CSV や XML での取得も可能。
import pyexifinfo
data = pyexifinfo.get_csv("<FileName>")
# data: str型
data = pyexifinfo.get_json("<FileName>")[0]
# data: dict型
data = pyexifinfo.get_xml("<FileName>")
# data: str型
参考:
外部コマンド実行で取得
exiftool
コマンドを外部コマンド呼び出しで実行し、標準出力を取得するという無理やりな方法です。
当然ながら、この方法ではexiftool
コマンドがインストールされている必要があります。
# On APT (Debian, Ubuntu...)
sudo apt install exiftool
from subprocess import run, PIPE
buf = run("exiftool -s3 -FileName 'FileName'", shell=True, stdout=PIPE)
# buf: bytes型
data = buf.stdout.decode("UTF-8").strip("\n")
# data: str型
-FileName
オプションは、ファイル名のみを表示させるオプション。
その他メタデータを表示させるには、別のタグを記述、あるいは記述無しで全表示。
全メタデータを取得してやりくりするには、文字列処理を自力で書かなければならない。
(地味に大掛かりなことをやっているので、この方法は非推奨です。)