Как использовать python-magic 5.19-1

Мне нужно определить MIME-типы из файлов без суффикса в python3, и я подумал о 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, Некоторые из них возвращаются методами модуляmagic.magic_set() а также magic_t(), Поэтому я попытался создать Magic с любым из них. Когда я тогда позвоню file() метод из экземпляра, он всегда будет возвращать пустой результат и errlvl() метод говорит мне об ошибке нет. 22. Так как же мне использовать магию?

1 ответ

Решение

Я думаю, что вы путаете разные реализации "python-magic"

Похоже, что вы установили python-magic-5.19.1, однако сначала вы ссылаетесь на документацию по python-magic-0.4.6, а во - вторых - filemagic-1.6. Я думаю, что вам лучше использовать python-magic-0.4.6, так как он легко доступен в PYPI и легко устанавливается через pip в виртуальные среды.

Трудно найти документацию для 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'
Другие вопросы по тегам