跳转到主要内容

使用libmagic库进行文件类型识别

项目描述

python-magic

PyPI version Build Status Join the chat at https://gitter.im/ahupp/python-magic

python-magic是libmagic文件类型识别库的Python接口。libmagic通过检查其头部并根据预定义的文件类型列表来识别文件类型。此功能通过Unix命令file暴露给命令行。

用法

>>> import magic
>>> magic.from_file("testdata/test.pdf")
'PDF document, version 1.2'
# recommend using at least the first 2048 bytes, as less can produce incorrect identification
>>> magic.from_buffer(open("testdata/test.pdf", "rb").read(2048))
'PDF document, version 1.2'
>>> magic.from_file("testdata/test.pdf", mime=True)
'application/pdf'

还有一个提供更多直接控制的Magic类,包括覆盖魔法数据库文件和启用字符编码检测。不建议一般使用。特别是,它不安全地在多个线程之间共享,如果尝试这样做将失败。

>>> f = magic.Magic(uncompress=True)
>>> f.from_file('testdata/test.gz')
'ASCII text (gzip compressed data, was "test", last modified: Sat Jun 28
21:32:52 2008, from Unix)'

您还可以组合标志选项

>>> f = magic.Magic(mime=True, uncompress=True)
>>> f.from_file('testdata/test.gz')
'text/plain'

安装

python-magic的当前稳定版本可在PyPI上获取,可以通过运行pip install python-magic进行安装。

其他来源

此模块是libmagic C库的简单包装,也必须安装

Debian/Ubuntu

sudo apt-get install libmagic1

Windows

您需要libmagic的DLL。@julian-r维护一个包含DLL的pypi包,您可以使用以下命令获取它:

pip install python-magic-bin

OSX

  • 当使用Homebrew时: brew install libmagic
  • 当使用macports时: port install file

故障排除

  • “MagicException:无法找到任何magic文件!”:一些libmagic的安装没有正确指向它们的magic数据库文件。请在构造函数中显式指定文件路径:magic.Magic(magic_file="path_to_magic_file")

  • “WindowsError:[错误193] %1不是一个有效的Win32应用程序”:尝试在64位Python构建中运行32位libmagic DLL将失败并显示此错误。以下是Windows的64位libmagic构建:https://github.com/pidydx/libmagicwin64。新版本可以在这里找到:https://github.com/nscaife/file-windows

  • “WindowsError:异常:写入0x00000000时的访问违规” 这可能表明您正在混合Windows Python和Cygwin Python。请确保您的libmagic和Python构建是一致的。

错误报告

python-magic是libmagic C库的薄层。历史上,大多数针对python-magic报告的错误实际上是libmagic的错误;libmagic的错误可以在此处报告:https://bugs.astron.com/my_view_page.php。如果您不确定错误在哪里,请随时在GitHub上提交问题,我可以进行分类。

运行测试

在多种Linux发行版上运行测试(取决于Docker)

./test_docker.sh

在所有可用的Python版本上本地运行测试

./test/run.py

针对特定Python版本运行

LC_ALL=en_US.UTF-8 python3 test/test.py

libmagic Python API兼容性

libmagic附带Python绑定使用了一个与此包冲突的模块名。为了解决这个问题,python-magic包括了一个libmagic API的兼容层。有关libmagic / python-magic兼容性的指南,请参阅COMPAT.md

版本控制

次要版本升级应该是向后兼容的。主要版本升级则不是。

作者

由Adam Hupp于2001年为从未启动的项目编写。最初使用SWIG进行C库绑定,但后来切换到ctypes,因为它是Python标准库的一部分。

您可以通过我的网站GitHub与我联系。

许可证

python-magic遵循MIT许可证。有关详细信息,请参阅包含的LICENSE文件。

我正在以开源许可证提供存储库中的代码。由于这是我的个人存储库,因此您收到的代码许可是由我而非我的雇主(Facebook)提供的。

项目详情


下载文件

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

源代码分发

python-magic-0.4.27.tar.gz (14.7 kB 查看哈希值)

上传时间 源代码

构建版本

python_magic-0.4.27-py2.py3-none-any.whl (13.8 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者