魔法文件检测的纯蟒蛇实现

puremagic的Python项目详细描述


puremagic是一个纯python模块,它将基于 这是神奇的数字。

BuildStatusCoverageStatusLicensePyPi

它被设计成极简主义和固有的跨平台 兼容的。它也被设计成python魔术的替身,它 合并来自文件(文件名[,mime])和 来自字符串(string[,mime]),但是magic_file()和 magic_string()更强大,还将显示信心和 重复匹配。

它不会尝试匹配非魔术字符串的文件。换句话说 不会在特定字节窗口内搜索字符串,如 其他人可能会。

使用“file”或“libmagic”包装器的优点:

  • 更快
  • 重量轻
  • 跨平台兼容
  • 无依赖关系

缺点:

  • 没有那么多文件类型
  • 没有多语言注释
  • 由于较小或重复使用的幻数而导致的重复

(通过贡献帮助解决前两个缺点!)

兼容性

  • Python2.7+
  • Python3.3+
  • 皮比

使用travis ci在列出的平台上运行持续集成测试。

安装

在virtualenv或global中,只需运行:

$ python setup.py install

它没有依赖项(2.7+内置argparse除外)

使用量

“from_file”将返回最可能的文件扩展名。“魔法文件” 会给你一切可能的结果,以及信心。

importpuremagicfilename="test/resources/images/test.gif"ext=puremagic.from_file(filename)# '.gif'puremagic.magic_file(filename)# [['.gif', 'image/gif', 'Graphics interchange format file (GIF87a)', 0.7],#  ['.gif', '', 'GIF file', 0.5]]

使用“magic_file”,它会为每一场比赛提供最高的可信度:

  • 可能的扩展名
  • mime类型
  • 说明
  • 信心(所有标题必须完全匹配才能进入列表, 但这是按最长的标题排序的,因此是最精确的, 首先)

脚本

用法

$ python -m puremagic [options] filename <filename2>...

示例

$ python -m puremagic test/resources/images/test.gif
'test/resources/images/test.gif' : .gif

$ python -m puremagic -m test/resources/images/test.gif test/resources/audio/test.mp3
'test/resources/images/test.gif' : image/gif
'test/resources/audio/test.mp3' : audio/mpeg

常见问题

文件类型实际上是x,但它显示为y,并且 自信?

当文件的签名与 文件标准。子集签名将更长,因此报告 因为它将同时具有基本文件类型 签名加上附加的子集。

您没有可以更好地检测大量 常见格式,为什么?

设计上的选择,所以会更快更准确。没有 更智能或更深入的识别通过滑动偏移我不知道 把它作为“神奇数字”库的一部分,你会感到很舒服。

您的版本没有我想要的那么完整,我还应该在哪里 你看?

查看包装libmagic或使用类似 阿帕奇·蒂卡。

确认

加里凯斯勒

使用HIS文件签名表,请访问: http://www.garykessler.net/library/file_sigs.html

freedesktop.org

使用共享的mime信息文件(即使他们确实使用xml,blea),请访问: https://cgit.freedesktop.org/xdg/shared-mime-info/

许可证

麻省理工学院许可证,见许可证,版权所有(C)2013-2018 Chris Griffith

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何修改打印板?   java Spring批处理JdbcCursorItemReader还是RepositoryItemReader?   java如何在JTable Swing中增加标题列的字体?   java在数组方面遇到问题,导致表达式非法启动   java如何为maven pom的某些部分关闭Eclipse代码格式化程序。xml   java Dropwizard登录代码   java Jersey 2.22:客户端的默认连接超时是多少?   java无法自动连接字段:javax。sql。数据来源   如何从java中的行列表中获取单词列表?   java JDBC批量更新和处理异常?   计算大根:bigdecimal/java   java如何在JavaCC语法中提到trycatch块   javasocket。getInetAddress()不返回任何内容   oracle SQL开发人员错误无法找到Java虚拟机   java我如何计算和显示未来5年每一年的投资价值   java如何关闭浏览器选项卡?   java如何在showMessageDialog中打印双2D数组?   java从站点抓取播放列表URL?   selenium中的java点击css按钮