【问题标题】:content-type text/plain has file extension .ksh?content-type text/plain 的文件扩展名为 .ksh?
【发布时间】:2019-05-01 15:40:57
【问题描述】:

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”适合。

即使filetype 库也无法处理这个问题:-(

见https://github.com/h2non/filetype.py/issues/30

【问题讨论】:

  • @EdHeal 我只关心“text/plain”,另一个问题是关于许多其他 mime 类型。
  • 是的,已经有大致相同的问题了。但这没有有效的答案。只是有一个解决方法。
  • 为什么不对那些众所周知的内容类型进行硬编码呢?我不认为你可以用 mimetypes lib 得到一个有效的答案。
  • @georgexsh 是的,我可以自己硬编码一些众所周知的映射。这样,开发人员一次又一次地解决了同样的问题。硬编码有效。如果可能的话,我只是想避免它。这就是我在这里问的原因。

标签: python mime-types


【解决方案1】:

要使用 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 只需要the first arbitrary extension,所以这些还没有排序,因此您观察到不同的输出。

【讨论】:

    【解决方案2】:

    虽然问题提到了mimetypes.guess_extension,但实际上无法用该模块中的信息来回答。 mime 类型到扩展名的映射是一对多的,mimetypes 数据库中没有权重信息,按字母顺序对扩展名进行排序可以给出一致的答案,但显然不是 OP 想要的。我考虑了以下选项:

    • 根据授权,IANA DB 没有每个的扩展信息 类型,只有少数类型有此信息,需要努力解析。

    • 按人气,我希望有一个。

    • 一致认为,一个名为 "Incomplete list of MIME types" 的 MDN wiki 页面最接近:它得到积极维护,它只列出了一些知名 mime 类型的一个扩展。

    我想实际的解决方案是,从上述 MDN wiki 中获取表格,对这些类型进行硬编码,使用 mimetypes.guess_extension 作为后备。

    请注意,您应该注意MDN content license。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2012-05-19
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 2019-09-13
      相关资源
      最近更新 更多