[英]content-type text/plain has file extension .ksh?
Python 2.7:
>>> from mimetypes import guess_extension
>>> guess_extension('text/plain')
'.ksh'
Python 3.5:
>>> from mimetypes import guess_extension
>>> guess_extension('text/plain')
'.c'
我怎樣才能得到有效答案?
對我來說,“。txt”適合。
即使文件類型 lib也無法處理這個:-(
要使用Python 3和2獲得一致的輸出,您需要使用guess_all_extensions
並對輸出進行排序:
>>> from mimetypes import guess_all_extensions
>>> sorted(guess_all_extensions('text/plain'))
['.asc', '.bat', '.c', '.cc', '.conf', '.cxx', '.el', '.f90', '.h', '.hh', '.hxx', '.ksh', '.log', '.pl', '.pm', '.text', '.txt']
.txt
是最后一項。
有點奇怪,這些尚未排序,因為guess_extension
只采用第一個任意擴展 ,因此您觀察到不同的輸出。
雖然問題提到了mimetypes.guess_extension
,但它實際上無法用該模塊中的信息來回答。 mime類型到擴展名映射是mimetypes
, mimetypes
數據庫中沒有權重信息,按字母順序排序擴展可以給出一致的答案,但顯然不是OP想要的。 我考慮了以下選項:
根據權限, IANA DB沒有針對每種類型的擴展信息,只有少數類型具有此信息並且需要努力解析。
受歡迎程度,我希望有一個。
一致同意,名為“不完整的MIME類型列表”的MDN維基頁面最為接近:它是主動維護的,它只為一些眾所周知的mime類型列出了一個擴展名。
我想實際的解決方案是,從上述MDN wiki中獲取表格,硬編碼這些類型,使用mimetypes.guess_extension
作為后備。
請注意,您應該注意MDN內容許可證 。
guess_extension
就是這樣的:
for x in mt.types_map:
if mt.types_map[x] == 'text/plain':
return x
由於有多個擴展可以與文本文件相關聯,因此沒有什么比這更好的了(沒有一些先驗知識,這對我們大多數人來說可能有意義,也可能沒有意義)。 因此,完成此工作的唯一方法是有關排序或手動選擇所需擴展的一些解決方法。 我建議只包裝一個更有意義的函數 - 你正在考慮默認擴展(我認為),而不是猜測。 因此,我可能會硬編碼:
def default_extension(type):
if type == 'text/plain': return '.txt'
return mt.guess_extension(type)
if
您想要任何默認值。 也許擁有默認字典會更有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.