首页 / 知识
如何在python中找到文件的mime类型?
2023-04-14 04:38:00

How to find the mime type of a file in python?假设您想在某处保存一堆文件,例如在BLOB中。 假设你想通过网页将这些文件输出,并让客户端自动打开正确的应用程序/查看器。 假设:浏览器通过HTTP响应中的mime-type(content-type?)标头确定要使用的应用程序/查看器。 基于该假设,除了文件的字节外,您还希望保存MIME类型。 您如何找到文件的MIME类型? 我目前在Mac上,但这也适用于Windows。 将文件发布到网页时,浏览器是否会添加此信息? 是否有一个整洁的python库来查找这些信息? WebService或(甚至更好)可下载的数据库? toivotuo建议的python-magic方法已经过时了。 Python-magic的当前主干位于Github,基于自述文件,找到MIME类型,就像这样。
标准库中的mimetypes模块将从文件扩展名中确定/猜测MIME类型。 如果用户正在上传文件,则HTTP帖子将包含文件的MIME类型以及数据。例如,Django使这些数据可用作UploadedFile对象的属性。 比使用mimetypes库更可靠的方法是使用python-magic包。
这相当于使用file(1)。 在Django上,还可以确保MIME类型与UploadedFile.content_type的MIME类型匹配。 这似乎很容易
请参考Old Post 有3个不同的库包含libmagic。 其中2个在pypi上可用(因此pip安装将起作用):
另外,类似于python-magic可以在最新的libmagic源代码中直接获得,它是你在linux发行版中可能拥有的那个。 在Debian中,包python-magic就是关于这一个,它被用作toivotuo所说的并且它没有像Simon Zimmermann所说的那样(恕我直言)。 在我看来是另一种看法(由libmagic的原作者)。 太糟糕了,不能直接在pypi上获得。 在python 2.6中:
Python绑定到libmagic 关于这个主题的所有不同答案都非常令人困惑,所以我希望通过对libmagic的不同绑定的概述更加清晰。以前,mammadori给出了一个简短的答案,列出了可用的选项。 libmagic
在确定文件mime-type时,选择的工具简称为
现在这个工具,如果你想使用任何与python的libmagic绑定,你将需要它已经有自己的python绑定称为
除此之外,您还可以通过使用
toivotuo和ewr2san都使用 Python魔法
这是Simon Zimmermann在他的回答中谈到的图书馆,也是Claude COULOMBE以及Gringo Suave所使用的图书馆。 filemagic
注意:此项目最后更新于2013年!
由于基于相同的c-api,该库与 你没有说明你正在使用什么样的Web服务器,但Apache有一个很好的小模块叫做Mime Magic,它用来确定文件的类型。它会读取文件的一些内容,并根据找到的字符尝试找出它的类型。而正如Dave Webb提到的python下的MimeTypes模块将起作用,只要扩展是很方便的。
或者,如果您坐在UNIX框上,则可以使用 @toivotuo的方法在python3下对我来说效果最好,最可靠。我的目标是识别没有可靠的.gz扩展名的gzip压缩文件。我安装了python3-magic。
对于gzip压缩文件,它返回:
对于解压缩的txt文件(iostat数据):
对于tar文件:
对于bz2文件:
最后但并非最不重要的是一个.zip文件: 2017年更新 不需要去github,它是以不同的名字在PyPi上:
代码也可以简化:
在Python 3.x和webapp中,文件的url没有扩展名或伪扩展名。你应该使用安装python-magic
对于Mac OS X,您还应该安装libmagic
代码段
或者你可以在阅读中加入一个大小
mimetypes模块只根据文件扩展名识别文件类型。如果您尝试恢复没有扩展名的文件的文件类型,mimetypes将无法正常工作。 我已经尝试了很多例子,但是Django mutagen很好用。
检查文件是否为
缺点是您检查文件类型的能力有限,但如果您不仅要检查文件类型还要访问其他信息,这是一个很好的方法。 python 3 ref:https://docs.python.org/3.2/library/mimetypes.html
这可能已经过时了,但为什么不直接从Django使用UploadedFile.content_type?是不一样的?(https://docs.djangoproject.com/en/1.11/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile.content_type)
对于可以使用的字节数组类型数据 我先尝试mimetypes库。如果它不起作用,我会改用python-magic libary。
你可以使用imghdr Python模块。 |
最新内容
相关内容
linux改文件权限命令?
linux改文件权限命令?,系统,工具,档案,权限,文件,信息,命令,目录,选项,用户,在linux系统中修改文件权限使用的命令是在 Linux 中,要更改一个文linux命令交换文件名?
linux命令交换文件名?,命令,文件,数据,名称,工具,地址,软件,系统,基础知识,文件名,linux中用什么命令移修改文件夹名1、linux下使用mv命令来移linux改变文件所有者的命令?
linux改变文件所有者的命令?,系统,工具,文件,命令,信息,名称,用户组,用户,所有者,权限,linux修改文件权限?打开linux系统,在linux的桌面的空白查看linux库类型命令?
查看linux库类型命令?,系统,工作,信息,状态,电脑,命令,工具,代码,地址,发行,如何查看Linux上程序或进程用到的库查看程序依赖的动态库:readelflinux命令输出加时间?
linux命令输出加时间?,时间,系统,名称,设备,命令,信息,管理,标准,数字,百度,linux中,怎么通过shell语句获取当前日期,输出格式要求20111224._linux下替换文件命令?
linux下替换文件命令?,文件,一致,评论,名称,标的,资料,工作,命令,字符串,内容,linux替换原来文件的命令方法1:sed -i s/被替换的内容/要替换成linux命令日志输出?
linux命令日志输出?,系统,状态,命令,情况,对比,标准,实时,服务,下来,数据,怎么导出linux系统日志.1、首先进入系统日志,所有服务的登录的文件或linux寻找文件夹命令?
linux寻找文件夹命令?,名称,命令,文件,位置,工作,标准,目录,子目录,文件名,字符串,linux文件夹查询命令有哪些less命令,less命令的功能几乎和molinux把文件复制命令?
linux把文件复制命令?,名字,文件,软件,系统,位置,目录,命令,源文件,目标,文件夹,在Linux中,要将指定源文件复制到目标文件,但不覆盖原有文件时linux浏览网页的命令?
linux浏览网页的命令?,工作,系统,传播,地址,命令,环境,发行,信息,网络,基础,linux在命令符界面如何浏览网页首先,连接相应linux主机,进入到linuxlinux文件夹合并命令?
linux文件夹合并命令?,文件,对比,第一,下来,命令,文件夹,两个,字段,内容,数组,在linux下我有两个文件夹w1,w2,怎样把它们合并到一个文件夹1、linux下文件创建命令?
linux下文件创建命令?,名字,名称,首次,命令,文件,系统,密码,文件名,文件夹,目录,Linux虚拟机命令如何创建新的文件和文件夹首先,连接相应linux