在Python中,如何获取文件的内容类型或mime类型?

在Python中,如何获取文件的内容类型或mime类型?,python,email,file,mime,Python,Email,File,Mime,可能重复: 我正在使用一个电子邮件处理API(sendgrid.com),将所有传入的电子邮件发布到我应用程序中的web请求处理程序。附件以attachment0=xyz&attachment1=abc的形式发布,以及其他电子邮件字段,如“收件人”“抄送”“主题”等 然后,我将这些附件作为文件存储在BlobStore中(使用appengine)。要将这些文件返回给用户,必须指定mime类型/内容类型。据我所知,它通常取决于文件类型。但我不清楚如何从传递的字符串中获取文件类型 是否有一个库可以根

可能重复:

我正在使用一个电子邮件处理API(sendgrid.com),将所有传入的电子邮件发布到我应用程序中的web请求处理程序。附件以attachment0=xyz&attachment1=abc的形式发布,以及其他电子邮件字段,如“收件人”“抄送”“主题”等

然后,我将这些附件作为文件存储在BlobStore中(使用appengine)。要将这些文件返回给用户,必须指定mime类型/内容类型。据我所知,它通常取决于文件类型。但我不清楚如何从传递的字符串中获取文件类型

是否有一个库可以根据文件的字节内容计算出文件类型


只是澄清一下,没有文件名或文件扩展名。只有文件的字节内容。

如果在上传文件时保存了文件名,则可以使用
mimetypes.guess\u type
函数在此处进行演示。亚历山大的问题很好读

不幸的是,这不是你的情况。如果您只有一个二进制blob,恐怕您必须在这里使用一些自定义的启发式方法。遵循以下简单步骤:

  • 构建已知签名的地图。我马上举个例子
  • 从blob读入前4个字节
  • 对步骤1中构建的地图执行最长匹配。最长匹配指的是如果所有4个字节都匹配,则使用它,然后尝试使用前3个字节、前2个字节,最后是前1个字节
  • 例如:

    ZIP文件以两个字符开头
    PK
    ,RAR文件以
    RAR
    ,PDF以
    %PDF
    开头,PNG以
    \x89PNG
    开头,依此类推

    这将无法识别某些文件(例如JPG),但您在这里有了一个良好的开始

    或者,您也可以使用。

    中接受的答案与此问题无关。然而,提到
    pythonmagic
    是不正确的。