Python 如何根据文件名预测文件的mime类型?

Python 如何根据文件名预测文件的mime类型?,python,mime-types,mime,Python,Mime Types,Mime,此函数用于预测文件的mime类型 根据它的名字。如果无法预测mime类型, 它默认为应用程序/八位字节流,也称为任意二进制。 我想知道是否有一种更通灵/更干净的方法 编写这个函数的方法 from mimetypes import guess_type def guess_mime(fname): try: return tuple(guess_type(fname)[0].split('/')) except AttributeError: re

此函数用于预测文件的mime类型 根据它的名字。如果无法预测mime类型, 它默认为应用程序/八位字节流,也称为任意二进制。 我想知道是否有一种更通灵/更干净的方法 编写这个函数的方法

from mimetypes import guess_type

def guess_mime(fname):
    try:
        return tuple(guess_type(fname)[0].split('/'))
    except AttributeError:
        return 'application', 'octet-stream'
使用图书馆:

通过以下功能轻松安装:

pip install python-magic
使用图书馆:

通过以下功能轻松安装:

pip install python-magic
在这种情况下,我不会使用try/except,因为这并不是真正的异常行为,而只是guess_type作为类型返回None的情况。普通的旧if/else或三元。。。如果其他的更为恰当,使代码的作用更为清晰,后者更为简短:

 def guess_mime(fname):
    _type, _ = mimetypes.guess_type(fname)
    return tuple(_type.split("/")) if _type is not None else "application/octet-stream"
您还可以使用或使用_type,如果_type为false,则可以使用默认值

 def guess_mime(fname):
    _type, _ = mimetypes.guess_type(fname)
    return tuple((_type or "application/octet-stream").split("/"))
当然,在这两种情况下,如果函数也可能返回一个列表,则可能不需要转换为tuple。

在这种情况下,我不会使用try/except,因为这不是真正的异常行为,而只是guess\u type作为类型返回None的情况。普通的旧if/else或三元。。。如果其他的更为恰当,使代码的作用更为清晰,后者更为简短:

 def guess_mime(fname):
    _type, _ = mimetypes.guess_type(fname)
    return tuple(_type.split("/")) if _type is not None else "application/octet-stream"
您还可以使用或使用_type,如果_type为false,则可以使用默认值

 def guess_mime(fname):
    _type, _ = mimetypes.guess_type(fname)
    return tuple((_type or "application/octet-stream").split("/"))
当然,在这两种情况下,如果函数也可能返回列表,则可能不需要转换为tuple