【问题标题】:Is there a more reliable drop-in replacement for mimetypes.guess_extension()?是否有更可靠的替代 mimetypes.guess_extension()?
【发布时间】:2016-09-23 16:07:47
【问题描述】:

我遇到了以下问题(Ubuntu Trusty 上的 Python 2.7.10):

>>> from mimetypes import guess_extension
>>> guess_extension('text/html')
'.html'
>>> guess_extension('application/json')
'.json'
>>> guess_extension('text/plain')
'.ksh'
>>> guess_extension('audio/mp3')
>>>

它得到了正确的 text/html 和 application/json,对 text/plain 做出了错误的猜测,并且没有给我任何音频/mp3。 (有趣的是,将最后一个更改为 audio/mpeg 会按预期返回 '.mp3',但这不是我的数据源使用的。)

在我的最后两种情况下,该模块是否有更可靠的替代方案可以返回'.txt''.mp3'?我研究了 python-magic,但根据我所看到的一切,它看起来需要读取实际的文件数据才能运行。就我而言,我所拥有的只是 MIME 类型作为字符串。

【问题讨论】:

    标签: python mime-types


    【解决方案1】:

    如果您正在处理一组 guess_extension 出错的 mimetype 修复集,请在猜测之前放置一个覆盖字典。

    known_extension = {'text/html': '.txt', ...}
    ...
    extension = known_extension.get(mimetype) or guess_extension(mimetype)
    

    【讨论】:

    • 也许是known_extension.get(mimetype, guess_extension(mimetype)。否则有两个问题:dict 不可调用,未知扩展会引发 KeyError 而不是评估右侧。
    • 固定(不同)上面。你的会工作,但涉及到可能不必要的guess_extension() 调用。在实践中可能无关紧要。
    • @DaveW.Smith 你是对的。您的解决方案有效。但对我来说,这更像是一种解决方法。不是解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2018-09-19
    • 1970-01-01
    • 2012-03-28
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多