【问题标题】:How to predict the mime type of a file based on its name?如何根据文件名预测文件的 MIME 类型?
【发布时间】:2020-12-21 00:11:39
【问题描述】:

该函数用于预测文件的mime类型 根据它的名字。如果它无法预测 mime 类型, 它默认为application/octet-stream,也就是任意二进制文件。 我想知道是否有更 Pythonic / 更清洁的方式 写这个函数。

from mimetypes import guess_type

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

【问题讨论】:

    标签: python mime-types mime


    【解决方案1】:

    使用Magic 库:

    import magic
    mime = magic.Magic(mime=True)
    mime.from_file("testdata/test.pdf") # 'application/pdf'
    

    轻松安装:

    pip install python-magic
    

    【讨论】:

      【解决方案2】:

      在这种情况下,我不会使用 try/except,因为这并不是真正的“异常”行为,而只是 guess_type 返回 None 作为类型的情况。一个普通的旧 if/else 或三元 ... if ... else ... 会更合适,让代码在做什么更清楚,而后者更短:

       def guess_mime(fname):
          _type, _ = mimetypes.guess_type(fname)
          return tuple(_type.split("/")) if _type is not None else "application/octet-stream"
      

      您也可以使用or 来使用_type,或者如果_type 为“假”,则使用默认值。

       def guess_mime(fname):
          _type, _ = mimetypes.guess_type(fname)
          return tuple((_type or "application/octet-stream").split("/"))
      

      当然,在这两种情况下,如果函数也可能返回list,则可能不需要转换为tuple

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-24
        • 2011-05-23
        • 2018-10-16
        相关资源
        最近更新 更多