z3c.sharedmimeinfo 0.1.0
pip install z3c.sharedmimeinfo
上次发布日期:
基于共享mime信息的zope mime类型猜测框架
- 您所在的位置:
- Python中文网 >
- pypi >
- z3c.sharedmimeinfo库 >
- 正文
z3c.sharedmimeinfo的Python项目详细描述
z3c.sharedmimeinfo
此包提供一个实用程序,用于根据文件名猜测mime类型和/或 实际内容。它基于freedesktop.org的共享mime信息数据库。
内容
Shared MIME info database
那shared-mime-info 是一个通用mime类型的可扩展数据库。它提供了强大的mime类型 检测机制以及多语种类型描述。
此软件包要求安装并访问共享的mime信息。这个 最简单的方法是在系统范围内安装它,例如安装 ubuntu上的shared-mime-info包。specification还描述了 安装和扩展数据库的其他方法。
Thread-safety
注意,这个包目前不是线程安全的,因为数据意味着 仅在模块导入时加载一次。如果有什么问题是因为 那,将来可能会改变。
MIME type guessing
使用此包的最简单方法是从 根模块:
>>> from z3c.sharedmimeinfo import getType
此函数尝试猜测共享mime信息中指定的mime类型 规范文档并始终返回一些可用的mime类型,使用 应用程序/八位字节流或文本/纯文本作为回退。它可以通过 文件名、其内容或两者,因此它接受两个参数:file name(string) 和/或文件(类似文件的对象)。至少应该给其中一个。
如上所述,它至少需要一个论点,所以你不能不说 参数:
>>> getType() Traceback (most recent call last): ... TypeError: Either filename or file should be provided or both of them
通过filename参数传递文件名:
>>> print getType(filename='document.doc') application/msword
通过file参数传递文件内容,该参数接受如下文件 反对。让我们使用testing helper函数打开一个示例文件并尝试 要猜出它的类型:
>>> print getType(file=openSample('png')) image/png
如果无法检测到mime类型,text/plain或 application/octet-stream将被返回。函数将尝试猜测 检查前32个字节是文本还是二进制:
>>> print getType(filename='somefile', file=openSample('text')) text/plain >>> print getType(filename='somefile', file=openSample('binary')) application/octet-stream
MIME type objects
由getType和其他函数(见下文)返回的对象实际上是 一个扩展的unicode字符串对象,提供有关mime的附加信息 键入。它们提供imimimetype接口:
>>> from zope.interface.verify import verifyObject >>> from z3c.sharedmimeinfo.interfaces import IMIMEType >>> mt = getType(filename='document.doc') >>> verifyObject(IMIMEType, mt) True
因为它们实际上是Unicode对象,所以可以像字符串一样进行比较:
>>> mt == 'application/msword' True
它们还提供media和subtype属性:
>>> mt.media u'application' >>> mt.subtype u'msword'
最后,它们提供了title属性,该属性是可翻译的 消息:
>>> mt.title u'application/msword' >>> from zope.i18nmessageid.message import Message >>> isinstance(mt.title, Message) True
让我们检查一下共享mime信息的i18n特性 受此软件包支持。如上所示,mime类型标题消息id是 实际上它是<;media>;/<;subtype>;,但是如果我们翻译它,我们将得到 人性化字符串:
>>> from zope.i18n import translate >>> translate(mt.title) u'Word document' >>> translate(mt.title, target_language='ru') u'\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 Word' >>> from z3c.sharedmimeinfo.mimetype import MIMEType
我们还可以使用mimetype类手工创建imimimetype对象:
>>> from z3c.sharedmimeinfo.mimetype import MIMEType
我们可以创建它们,将媒体和子类型指定为两个参数或单个参数 “media/subtype”表单中的参数:
>>> MIMEType('text/plain') <MIMEType text/plain> >>> MIMEType('image', 'png') <MIMEType image/png>
注意,mimetype对象是缓存的,因此如果要创建另一个 对象对于相同的mime类型,您将得到相同的对象:
>>> mt = MIMEType('text/plain') >>> mt2 = MIMEType('text/plain') >>> mt2 is mt True
Advanced usage
上面描述的getType函数实际上是 imimetypesutability对象。imimetypesutability是 猜测mime类型。
让我们直接导入实用程序并使用它:
>>> from z3c.sharedmimeinfo.utility import mimeTypesUtility >>> from z3c.sharedmimeinfo.interfaces import IMIMETypesUtility >>> verifyObject(IMIMETypesUtility, mimeTypesUtility) True
它有三种获取mime类型的方法。这三种方法是 getType(如上所述),getTypeByFileName,getTypeByContents。
Detection by file name
mime types实用程序的getTypeByFileName方法查找类型 按文件名:
>>> mt = mimeTypesUtility.getTypeByFileName('example.doc')
共享mime信息数据库非常好,它甚至可以检测 文件名,如Makefile:
>>> print mimeTypesUtility.getTypeByFileName('Makefile') text/x-makefile
同时,它也知道分机字母大小写的区别。例如.C 应该被检测为C++文件,当^ {tt18}$是普通C文件:
>>> print mimeTypesUtility.getTypeByFileName('hello.C') text/x-c++src >>> print mimeTypesUtility.getTypeByFileName('main.c') text/x-csrc
如果无法从文件名中确定类型,该方法将返回None。
>>> print mimeTypesUtility.getTypeByFileName('somefilename') None
Detection by contents
getTypeByContents方法接受一个类似文件的对象和两个可选的 参数:可用于指定范围的最小优先级和最大优先级 使用的“魔法”规则。默认情况下,最小优先级为0,最大优先级为 100,所以所有的规则都将被使用。请参阅的共享mime信息规范 细节。
我们有一些应该由内容检测的示例文件:
>>> fdoc = openSample('doc') >>> print mimeTypesUtility.getTypeByContents(fdoc) application/msword >>> fhtml = openSample('html') >>> print mimeTypesUtility.getTypeByContents(fhtml) text/html >>> fpdf = openSample('pdf') >>> print mimeTypesUtility.getTypeByContents(fpdf) application/pdf >>> fpng = openSample('png') >>> print mimeTypesUtility.getTypeByContents(fpng) image/png
如果我们传递的文件没有任何已知的魔法字节,它将返回None:
>>> funknown = openSample('binary') >>> print mimeTypesUtility.getTypeByContents(funknown) None >>> del fdoc, fhtml, fpdf, fpng, funknown
推荐PyPI第三方库
simpl
simp是一个有用的公共python库的集合,主要用于构建web服务和api
django-ses3
亚马逊简单电子邮件服务的django电子邮件后端
sentinella
一个基于tourbillon的python代理,用于收集openstack度量和日志并将它们存储到sentinel.la中
nexus_client
nexus的python客户端。
trepan3k
trepan家族中类似gdb的python调试器
umnomequalquer
嵌套列表的简单打印机
django-inline-orderable
一种使用拖放使内联可排序的简单方法。
aws-cdk.core
aws云开发工具包核心库
pynms
简单客户端
perl
珀尔
gui-action
未知
jct
json配置工具
redpipe
易redis管线
accessall
谷歌音乐命令行工具。
django-rating-stars
未知
导 航 栏
项目 链接
标 签
许可证: BSD许可证(BSD 3条款)
作者信息:: 暂无