【问题标题】:How can i get a file extension from a filetype?如何从文件类型中获取文件扩展名?
【发布时间】:2013-05-28 03:38:37
【问题描述】:

我有一个文件名列表如下

files = [
    '/dl/files/4j55eeer_wq3wxxpiqm.jpg',
    '/home/Desktop/hjsd03wnsbdr9rk3k',
    'kd0dje7cmidj0xks03nd8nd8a3',
    ...
]

问题是大多数文件的文件名中没有扩展名,获取这些文件的文件扩展名的最佳方法是什么?

我不知道这是否可能,因为 python 会将所有文件视为 bufferstring 对象,这些对象没有任何 filetype 与之关联。

这能做到吗?

【问题讨论】:

  • stackoverflow.com/questions/14412211/… 但这会给你输入而不是扩展名
  • 这应该是便携的吗? UNIX 的file 通常非常擅长查找文件类型...
  • @Bakuriu: file 使用libmagic,这是跨平台的。请参阅下面的 python-magic 库 John Zwinck 链接。

标签: python file


【解决方案1】:

使用magic 获取MIME 类型后,您可以使用mimetypes.guess_extension() 获取它的扩展名。

【讨论】:

  • 为什么guess_extension 为mimetype *.jpe 返回*.jpe,它只是在'/' 上使用split,然后返回以. 为前缀的第二个元素的前3 个字符? ?
  • @Amyth:名字里确实有“猜测”,所以应该有一点余地。
  • 嗯,明白了,但我猜,return '.' + mime.split('/')[1] 会返回更准确的结果?
  • 不,因为text/plain 不应该有.pla 作为扩展名。
  • @Amyth:它返回.jpe 的原因是因为*.jpeimage/jpeg 模拟类型的许多有效扩展之一。如果您改用mimetypes.guess_all_extensions(),您将看到完整的可能性列表。似乎mimetypes.guess_extension() 只取了这个列表的第一个元素。这也是当.txt 是显而易见的选择时,猜测text/plain 的mimetype 返回.h 的原因。
【解决方案2】:

如果您有一个从文件内容确定文件类型的预言机,就可以做到这一点。幸运的是,至少有一个这样的预言机已经在 Python 中实现了:https://github.com/ahupp/python-magic

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 2011-07-29
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多