使用libmagic库进行文件类型识别
项目描述
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标准库的一部分。
许可证
python-magic遵循MIT许可证。有关详细信息,请参阅包含的LICENSE文件。
我正在以开源许可证提供存储库中的代码。由于这是我的个人存储库,因此您收到的代码许可是由我而非我的雇主(Facebook)提供的。
项目详情
python-magic-0.4.27.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b |
|
MD5 | 5ec09788e8dce05dfd4fd5345153f8a9 |
|
BLAKE2b-256 | dadb0b3e28ac047452d079d375ec6798bf76a036a08182dbb39ed38116a49130 |
python_magic-0.4.27-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3 |
|
MD5 | 72e34d86a65f5656be0907d5cef4ecd3 |
|
BLAKE2b-256 | 6c739f872cb81fc5c3bb48f7227872c28975f998f3e7c2b1c16e95e6432bbb90 |