本文介紹如何在 Python 指令稿中使用 python-magic
模組檢查與判斷各種檔案的類型。
python-magic 是一個 libmagic
檔案類型辨識函式庫的 Python 介面模組,libmagic
可以藉由比對檔案的標頭來判斷檔案的類型,在 Linux 中的 file
指令就是利用這樣的方式來判斷檔案類型。
Python 的 python-magic
模組可以使用 pip
安裝:
# 安裝 python-magic 函式庫
pip install python-magic
python-magic
本身只是 libmagic
的介面,所以還要另外安裝 libmagic
函式庫。
若在 Ubuntu 或 Debian Linux 中,可以用 apt
安裝 libmagic
函式庫:
# 安裝 libmagic(Ubuntu Linux)
sudo apt-get install libmagic1
若在 Windows 中,可以用 pip
安裝 python-magic-bin
模組:
# 安裝 libmagic(Windows)
pip install python-magic-bin
若在 macOS 中則可透過 Homebrew 或 macports 的方式安裝 libmagic
函式庫:
# 安裝 libmagic(macOS 使用 Homebrew) brew install libmagic # 安裝 libmagic(macOS 使用 macports) port install file
若要檢查指定檔案的類型,可以使用 magic.from_file
函數從檔案直接讀取標頭資訊並判斷檔案類型:
import magic # 檢查檔案類型 print(magic.from_file("script.sh"))
Bourne-Again shell script, UTF-8 Unicode text executable
亦可自行讀取檔案標頭至緩衝區後,從緩衝區讀取標頭資料:
# 從緩衝區讀取資料 print(magic.from_buffer(open("doc.pdf", "rb").read(2048)))
PDF document, version 1.2
自行讀取檔案標頭時,讀取的長度建議至少為 2048
,太短的話容易造成誤判。
若要以 MIME 格式輸出,可以將 mime
參數設定為 True
:
# 以 MIME 格式輸出 print(magic.from_file("doc.pdf", mime=True))
application/pdf
若要判斷檔案的類型,可以考慮使用 MIME 格式的輸出來進行判斷:
# 檔案名稱 filename = "doc.pdf" # 判斷檔案類型 if magic.from_file(filename, mime=True) == 'application/pdf': print(f"{filename} is a PDF file.")