我需要在python3中确定没有后缀的文件中的MIME类型,我认为python-magic是一个合适的解决方案。 不幸的是它不能像这里描述的那样工作: https://github.com/ahupp/python-magic/blob/master/README.md
这是怎么回事:
>>> import magic
>>> magic.from_file("testdata/test.pdf")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'from_file'
所以我看了一下这个对象,它为我提供了类Magic
,我在这里找到了文档:
http://filemagic.readthedocs.org/en/latest/guide.html
我很惊讶,这也不起作用:
>>> with magic.Magic() as m:
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'ms'
>>> m = magic.Magic()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'ms'
>>>
我找不到任何关于如何在任何地方使用课程Magic
的信息,所以我继续进行试验和错误,直到我发现它只接受LP_magic_set
ms
的实例1}}。
其中一些是由模块的方法返回的
magic.magic_set()
和magic_t()
。
所以我尝试用其中任何一个实现Magic
。
当我从实例调用file()
方法时,它将始终返回空结果,errlvl()
方法告诉我错误号。 22。
那么我怎么用魔法?
答案 0 :(得分:12)
我认为你混淆了&#34; python-magic&#34;
的不同实现您似乎已安装python-magic-5.19.1,但是,您首先引用了python-magic-0.4.6的文档,其次是filemagic-1.6。我认为你最好使用python-magic-0.4.6,因为它可以在PYPI上轻松获得,并且可以通过pip
轻松安装到virtualenv环境中。
python-magic-5.19.1的文档很难得到,但我设法让它像这样工作:
>>> import magic
>>> m=magic.open(magic.MAGIC_NONE)
>>> m.load()
0
>>> m.file('/etc/passwd')
'ASCII text'
>>> m.file('/usr/share/cups/data/default.pdf')
'PDF document, version 1.5'
您还可以获得不同的魔术描述,例如: MIME类型:
>>> m=magic.open(magic.MAGIC_MIME)
>>> m.load()
0
>>> m.file('/etc/passwd')
'text/plain; charset=us-ascii'
>>> m.file('/usr/share/cups/data/default.pdf')
'application/pdf; charset=binary'
或更新版本的python-magic-5.30
>>> import magic
>>> magic.detect_from_filename('/etc/passwd')
FileMagic(mime_type='text/plain', encoding='us-ascii', name='ASCII text')
>>> magic.detect_from_filename('/etc/passwd').mime_type
'text/plain'