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第三方库
neutron-bsn-lldp
用于大交换网络集成的lldp代理。
rant
一个cli驱动的博客感知网站生成器。它的目的是使维护博客或个人网站变得简单,只需使用您最喜欢的控制台编辑器(如vim)和一些简单的命令
dragonpanda
龙熊猫api的python客户端
vunit_hdl
vunit是一个用于vhdl/systemverilog的开源单元测试框架。
QuerysetPaginator
此包有助于对求值查询集分页。
bible
圣经参考课
tvsort-sl
对电影和电视节目文件排序
bunk
kubernetes清单的模板化与环境管理
ezenum
很好的包裹。
clifactor
命令行变得像web应用一样简单
blanketdb
用于物联网项目的简单http访问数据库
ambiverseclient
没有项目描述
pywantickets
用于python的wantickets.com实现。
spackl
跨数据源统一查询实用程序
benchbot
benchbot提供了一个简单的基于python的包装器,用于基于qut的benchbot服务
导 航 栏
项目 链接
标 签
许可证: BSD许可证(BSD 3条款)
作者信息:: 暂无
最新PyPI项目
- italian_vip_says
- UFx
- vofs
- fake_item_generator
- NerEva
- django-monologue
- fio_product_attribute_strict
- climailsystem
- pyshape
- tbb-devel
- npy-append-arra
- anthill.tal.macrorenderer
- odoo11-addon-stock-a
- uuuu
- contextil
- fyl_nester
- appomatic_renderable
- teacher
- chuletas
- slackbot_ce
最新Python常见问题
- 使用Python创建一个非常大的二进制频率矩阵来运行协作过滤
- 使用Python创建一张HTML网页,其中在不同颜色中重复n遍显示“Hello World”的方法
- 使用Python创建一组唯一的值length L
- 使用python创建不同表格的透视表
- 使用python创建不和谐频道
- 使用python创建不存在的多个文件夹
- 使用python创建串行远程文件
- 使用python创建交互式仪表板时出现问题
- 使用python创建交互式绘图
- 使用python创建交互式自动电子邮件
- 使用Python创建价格列表
- 使用python创建修改的txt文件
- 使用Python创建全局变量,初始化后更改值
- 使用Python创建关键字搜索词数组
- 使用Python创建具有不均匀块大小/堆叠条形图的热图