跳转到主要内容

libmagic库的Python API,该库是Unix文件命令背后的库

项目描述

背景

libmagic 是一个库,它通常支持Unix系统上的 file 命令,除了Max OSX有自己的实现。该库处理加载描述用于识别各种文件类型的“魔法数字”的 数据库 文件,以及相关的MIME类型。该库还处理字符集检测。

安装

在安装 filemagic 之前,需要可用的 libmagic 库。要测试这一点,请检查 file 命令的存在以及/或 libmagic man页面。

$ which file
$ man libmagic

在Mac OSX上,Apple已经实现了自己的文件命令版本。但是,可以使用 homebrew 安装 libmagic

$ brew install libmagic

brew 安装完成后,应该通过 libmagic man页面的测试。

现在已确认 libmagic 的存在,请使用 pip 安装 filemagic。

$ pip install filemagic

现在应在Python shell中可用的 magic 模块。

>>> import magic

下一节将描述如何使用 magic.Magic 类来识别文件类型。

用法

“魔法”模块使用 ctypes 将来自 libmagic 的原始类型封装在更友好的 magic.Magic 类中。此类处理初始化、加载数据库和释放资源。

>>> import magic

为确保由 magic.Magic 正确释放资源,需要显式调用实例的 magic.Magic.close,或使用 with 语句。

>>> with magic.Magic() as m:
...     pass
...

magic.Magic 支持上下文管理器,确保在 with 语句结束时正确释放资源,无论是否发生异常。

要从文件名识别文件,请使用 magic.Magic.id_filename() 方法。

>>> with magic.Magic() as m:
...     m.id_filename('setup.py')
...
'Python script, ASCII text executable'

类似地,要从已读取的字符串中识别文件,请使用 magic.Magic.id_buffer 方法。

>>> with magic.Magic() as m:
...     m.id_buffer('#!/usr/bin/python\n')
...
'Python script, ASCII text executable'

如果要通过 MIME 类型而不是文本描述来识别,请创建 magic.Magic 实例时传递 magic.MAGIC_MIME_TYPE 标志。

>>> with magic.Magic(flags=magic.MAGIC_MIME_TYPE) as m:
...     m.id_filename('setup.py')
...
'text/x-python'

类似地,可以将 magic.MAGIC_MIME_ENCODING 传递以返回编码类型。

>>> with magic.Magic(flags=magic.MAGIC_MIME_ENCODING) as m:
...     m.id_filename('setup.py')
...
'us-ascii'

内存管理

libmagic 库在其 Python 外部分配内存用于自身。当不再需要 magic.Magic 实例时,需要释放此内存。首选的方法是显式调用 magic.Magic.close 方法或使用上述描述的 with 语句。

从版本 1.4 开始,magic.Magic 会在实例垃圾回收时自动清理内存。然而,与 CPython 不同,一些 Python 解释器(如 PyPyJythonIronPython)没有确定性的垃圾回收。因此,如果自动清理资源,filemagic 将发出警告。

Unicode 和 filemagic

在 Python2 和 Python3 中,magic.Magic 的方法会在传递给 libmagic 之前将任何 Unicode 对象(Python3 的默认字符串类型)编码为字节字符串。在 Python3 中,返回的字符串将使用默认编码类型解码为 Unicode。用户 不需要 担心是否将 Unicode 或字节传递给 magic.Magic 方法。然而,用户 需要 注意,返回的字符串在 Python3 中总是 Unicode,在 Python2 中总是字节字符串。

报告问题

filemagic 的源代码托管在 Github 上。可以使用 Github 的 问题跟踪系统 报告问题。

filemagic 已针对 libmagic 5.11 进行了测试。由 Travis CI 提供持续集成。当前的构建状态为 build_status

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

filemagic-1.6.tar.gz (16.8 kB 查看散列)

上传时间 源代码

由以下机构支持