mimetypes
— 將檔名對映到 MIME 型別¶
原始碼: Lib/mimetypes.py
mimetypes
模組在檔名或 URL 與和副檔名相關聯的 MIME 型別之間進行轉換。提供了從檔名到 MIME 型別以及從 MIME 型別到副檔名的轉換;後一種轉換不支援編碼。
該模組提供了一個類和一些便捷函式。這些函式是該模組的常規介面,但某些應用程式可能也對該類感興趣。
下面描述的函式提供了該模組的主要介面。如果模組尚未初始化,並且它們依賴於 init()
設定的資訊,它們將呼叫 init()
。
- mimetypes.guess_type(url, strict=True)¶
根據檔名、路徑或 URL(由 url 給出)猜測檔案型別。URL 可以是字串或 類路徑物件。
返回值是一個元組
(type, encoding)
,其中如果無法猜測型別(字尾缺失或未知),type 為None
,否則為'type/subtype'
形式的字串,可用於 MIME content-type 標頭。encoding 對於無編碼情況為
None
,或者是用於編碼的程式名稱(例如 compress 或 gzip)。該編碼適用於作為 Content-Encoding 標頭,不適用於 Content-Transfer-Encoding 標頭。對映是表驅動的。編碼字尾是大小寫敏感的;型別字尾首先嚐試大小寫敏感匹配,然後嘗試大小寫不敏感匹配。可選的 strict 引數是一個標誌,指定已知 MIME 型別的列表是否僅限於 在 IANA 註冊 的官方型別。但是,此模組的行為也取決於底層的作業系統。只有作業系統識別的或在 Python 內部資料庫中明確註冊的檔案型別才能被識別。當 strict 為
True
(預設值)時,僅支援 IANA 型別;當 strict 為False
時,還會識別一些額外的非標準但常用的 MIME 型別。在 3.8 版更改: 添加了對 url 是 類路徑物件 的支援。
從 3.13 版起棄用: 傳入檔案路徑而非 URL 的做法已被軟棄用。請改用
guess_file_type()
。
- mimetypes.guess_file_type(path, *, strict=True)¶
根據檔案路徑(由 path 給出)猜測檔案型別。與
guess_type()
函式類似,但接受路徑而不是 URL。路徑可以是字串、位元組物件或 類路徑物件。在 3.13 版本加入。
- mimetypes.guess_all_extensions(type, strict=True)¶
根據檔案的 MIME 型別(由 type 給出)猜測其副檔名。返回值是一個字串列表,給出所有可能的副檔名,包括前導點(
'.'
)。不保證這些副檔名與任何特定資料流相關聯,但會被guess_type()
和guess_file_type()
對映到 MIME 型別 type。可選的 strict 引數與
guess_type()
函式中的含義相同。
- mimetypes.guess_extension(type, strict=True)¶
根據檔案的 MIME 型別(由 type 給出)猜測其副檔名。返回值是一個字串,給出一個副檔名,包括前導點(
'.'
)。不保證該副檔名與任何特定資料流相關聯,但會被guess_type()
和guess_file_type()
對映到 MIME 型別 type。如果無法為 type 猜測到副檔名,則返回None
。可選的 strict 引數與
guess_type()
函式中的含義相同。
還提供一些額外的函式和資料項來控制模組的行為。
- mimetypes.init(files=None)¶
初始化內部資料結構。如果給出 files,它必須是一個檔名序列,用於擴充預設的型別對映。如果省略,則使用的檔名取自
knownfiles
;在 Windows 上,會載入當前的登錄檔設定。在 files 或knownfiles
中命名的每個檔案都優先於其前面命名的檔案。允許重複呼叫init()
。為 files 指定一個空列表將阻止應用系統預設值:只有內建列表中的已知值會存在。
如果 files 為
None
,內部資料結構將被完全重建為其初始預設值。這是一個穩定的操作,多次呼叫會產生相同的結果。在 3.2 版更改: 以前,Windows 登錄檔設定被忽略。
- mimetypes.read_mime_types(filename)¶
如果檔案 filename 存在,則載入其中給出的型別對映。型別對映作為字典返回,將副檔名(包括前導點
'.'
)對映到'type/subtype'
形式的字串。如果檔案 filename 不存在或無法讀取,則返回None
。
- mimetypes.add_type(type, ext, strict=True)¶
新增從 MIME 型別 type 到副檔名 ext 的對映。當副檔名已知時,新的型別將替換舊的型別。當型別已知時,副檔名將被新增到已知副檔名列表中。
當 strict 為
True
(預設值)時,對映將新增到官方 MIME 型別中,否則新增到非標準型別中。
- mimetypes.knownfiles¶
常用安裝的型別對映檔名列表。這些檔案通常命名為
mime.types
,並由不同的軟體包安裝在不同的位置。
- mimetypes.suffix_map¶
將字尾對映到字尾的字典。這用於允許識別那些編碼和型別由相同副檔名指示的已編碼檔案。例如,
.tgz
副檔名被對映到.tar.gz
,以允許分別識別編碼和型別。
- mimetypes.encodings_map¶
將副檔名對映到編碼型別的字典。
- mimetypes.types_map¶
將副檔名對映到 MIME 型別的字典。
- mimetypes.common_types¶
將副檔名對映到非標準但常見的 MIME 型別的字典。
該模組的一個用法示例
>>> import mimetypes
>>> mimetypes.init()
>>> mimetypes.knownfiles
['/etc/mime.types', '/etc/httpd/mime.types', ... ]
>>> mimetypes.suffix_map['.tgz']
'.tar.gz'
>>> mimetypes.encodings_map['.gz']
'gzip'
>>> mimetypes.types_map['.tgz']
'application/x-tar-gz'
MimeTypes 物件¶
MimeTypes
類可能對那些希望擁有多個 MIME 型別資料庫的應用程式有用;它提供了與 mimetypes
模組類似的介面。
- class mimetypes.MimeTypes(filenames=(), strict=True)¶
此類表示一個 MIME 型別資料庫。預設情況下,它提供對與此模組其餘部分相同的資料庫的訪問。初始資料庫是模組提供的資料庫的副本,並可以透過使用
read()
或readfp()
方法將額外的mime.types
樣式檔案載入到資料庫中來擴充套件。如果不需要預設資料,也可以在載入額外資料之前清除對映字典。可選的 filenames 引數可用於在預設資料庫之上載入其他檔案。
- suffix_map¶
將字尾對映到字尾的字典。這用於允許識別那些編碼和型別由相同副檔名指示的已編碼檔案。例如,
.tgz
副檔名被對映到.tar.gz
,以允許分別識別編碼和型別。這最初是模組中定義的全域性suffix_map
的副本。
- encodings_map¶
將副檔名對映到編碼型別的字典。這最初是模組中定義的全域性
encodings_map
的副本。
- types_map¶
包含兩個字典的元組,將副檔名對映到 MIME 型別:第一個字典用於非標準型別,第二個字典用於標準型別。它們由
common_types
和types_map
初始化。
- types_map_inv¶
包含兩個字典的元組,將 MIME 型別對映到副檔名列表:第一個字典用於非標準型別,第二個字典用於標準型別。它們由
common_types
和types_map
初始化。
- guess_extension(type, strict=True)¶
與
guess_extension()
函式類似,使用作為物件一部分儲存的表。
- guess_type(url, strict=True)¶
與
guess_type()
函式類似,使用作為物件一部分儲存的表。
- guess_file_type(path, *, strict=True)¶
與
guess_file_type()
函式類似,使用作為物件一部分儲存的表。在 3.13 版本加入。
- guess_all_extensions(type, strict=True)¶
與
guess_all_extensions()
函式類似,使用作為物件一部分儲存的表。
- read(filename, strict=True)¶
從名為 filename 的檔案中載入 MIME 資訊。這使用
readfp()
來解析檔案。如果 strict 為
True
,資訊將新增到標準型別列表中,否則新增到非標準型別列表中。
- readfp(fp, strict=True)¶
從開啟的檔案 fp 載入 MIME 型別資訊。該檔案必須具有標準
mime.types
檔案的格式。如果 strict 為
True
,資訊將新增到標準型別列表中,否則新增到非標準型別列表中。
- read_windows_registry(strict=True)¶
從 Windows 登錄檔載入 MIME 型別資訊。
可用性: Windows。
如果 strict 為
True
,資訊將新增到標準型別列表中,否則新增到非標準型別列表中。在 3.2 版本加入。
- add_type(type, ext, strict=True)¶
新增從 MIME 型別 type 到副檔名 ext 的對映。有效的副檔名以‘.’開頭或是空的。當副檔名已知時,新的型別將替換舊的型別。當型別已知時,副檔名將被新增到已知副檔名列表中。
當 strict 為
True
(預設值)時,對映將新增到官方 MIME 型別中,否則新增到非標準型別中。自 3.14 版起棄用,將在 3.16 版中移除: 在 Python 3.16 中,無效的、不帶點的副檔名將引發
ValueError
。
命令列用法¶
mimetypes
模組可以作為指令碼從命令列執行。
python -m mimetypes [-h] [-e] [-l] type [type ...]
接受以下選項
預設情況下,該指令碼將 MIME 型別轉換為副檔名。但是,如果指定了 --extension
,它會將副檔名轉換為 MIME 型別。
對於每個 type
條目,指令碼會向標準輸出流寫入一行。如果出現未知型別,它會向標準錯誤流寫入一條錯誤訊息,並以返回碼 1
退出。
命令列示例¶
以下是 mimetypes
命令列介面的典型用法示例
$ # get a MIME type by a file name
$ python -m mimetypes filename.png
type: image/png encoding: None
$ # get a MIME type by a URL
$ python -m mimetypes https://example.com/filename.txt
type: text/plain encoding: None
$ # get a complex MIME type
$ python -m mimetypes filename.tar.gz
type: application/x-tar encoding: gzip
$ # get a MIME type for a rare file extension
$ python -m mimetypes filename.pict
error: unknown extension of filename.pict
$ # now look in the extended database built into Python
$ python -m mimetypes --lenient filename.pict
type: image/pict encoding: None
$ # get a file extension by a MIME type
$ python -m mimetypes --extension text/javascript
.js
$ # get a file extension by a rare MIME type
$ python -m mimetypes --extension text/xul
error: unknown type text/xul
$ # now look in the extended database again
$ python -m mimetypes --extension --lenient text/xul
.xul
$ # try to feed an unknown file extension
$ python -m mimetypes filename.sh filename.nc filename.xxx filename.txt
type: application/x-sh encoding: None
type: application/x-netcdf encoding: None
error: unknown extension of filename.xxx
$ # try to feed an unknown MIME type
$ python -m mimetypes --extension audio/aac audio/opus audio/future audio/x-wav
.aac
.opus
error: unknown type audio/future