如何找到在python文件的MIME类型?

比方说,你要保存一堆文件的地方,例如在BLOB中。 比方说,你想通过一个网页抛出这些文件出来,让客户端自动打开正确的应用程序/浏览器。

假设:浏览器计算出由MIME类型(内容类型?)报头中的HTTP响应要使用的应用/浏览器。

基于这种假设,除了该文件的字节,还要保存的MIME类型。

你会如何​​找到MIME类型的文件呢? 我目前在Mac上,但这也应该在Windows上。

是否发布该文件的网页时,浏览器添加此信息?

有没有找到这个信息的整洁Python库? 一个Web服务或(甚至更好)可下载的数据库?

--------------解决方案-------------

该MIME类型模块中的标准库将决定/猜测从一个文件扩展名的MIME类型。

如果用户上传文件的HTTP发布将包含MIME类型旁边的数据文件。 例如,Django的该数据可作为UploadedFile的对象的属性。

通过toivotuo建议的蟒蛇,魔术方法已经过时。 Python的魔术目前的主干是在Github上,并根据自述那里,找到MIME类型,像这样做。

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

比使用MIME类型图书馆将使用Python魔法包更可靠的方式。

import magic
m = magic.open(magic.MAGIC_MIME)
m.load()
m.file("/tmp/document.pdf")

这相当于将使用文件(1)。

在Django的人们也可以确保MIME类型匹配UploadedFile.content_type的。

有迹象表明,包装libmagic 3个不同的库。

其中2个可PyPI上(因此点子安装将工作):

  • filemagic
  • 蟒蛇魔

而另一位,类似蟒蛇魔是直接在最新的libmagic资源可用,这是一个你可能在你的Linux发行版。

在Debian的软件包的python-魔术是这一个,它被用作toivotuo说着,西蒙齐默尔曼说(恕我直言)它没有过时。

在我看来,别人得(由libmagic的原作者)。

太糟糕了,是不是直接PyPI上。

在Python 2.6:

mime = subprocess.Popen("/usr/bin/file --mime PATH", shell=True, \
stdout=subprocess.PIPE).communicate()[0]

你没有说明什么是Web服务器,您正在使用,但是Apache有一个可爱的小模块,称为默剧魔术它用来确定一个文件的类型,当被告知这样做。 它读取一些文件的内容,并试图弄清楚它是基于发现的字符的类型。 正如戴维·韦伯提到的python的MIME类型模块将工作,提供了一个扩展方便。

另外,如果你是坐在在UNIX系统中,你可以使用sys.popen('file -i ' + fileName, mode='r')抢MIME类型。 的Windows应该有一个等价的命令,但我不能确定它是什么。

这似乎是非常容易

>>> from mimetypes import MimeTypes
>>> import urllib
>>> mime = MimeTypes()
>>> url = urllib.pathname2url('Upload.xml')
>>> mime_type = mime.guess_type(url)
>>> print mime_type
('application/xml', None)

请参考旧帖子

该MIME类型模块只承认基于文件扩展名的文件类型。 如果你将尝试恢复文件的文件类型不带扩展的MIME类型不会工作。

@toivotuo的方法下python3效果最好,最可靠的我。 我的目标是确定不具有可靠的扩展名为.gz gzip压缩文件。 我安装了python3魔法。

import magic

filename = "./datasets/test"

def file_mime_type(filename):
m = magic.open(magic.MAGIC_MIME)
m.load()
return(m.file(filename))

print(file_mime_type(filename))

为gzip压缩的文件,它返回:应用程序/ GZIP; 字符集=二进制

为解压缩的txt文件(iostat的数据):text / plain的; 字符集= US-ASCII

一个tar文件:应用程序/ x-焦油; 字符集=二进制

对于BZ2文件:应用程序/ x-bzip2的; 字符集=二进制

最后但并非最不重要的,我的.zip文件:应用程序/压缩; 字符集=二进制

您可以使用imghdr Python模块。

分类:蟒蛇 时间:2015-03-15 人气:0
本文关键词: 蟒蛇,哑剧
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.313 (s). 10 q(s)