Как использовать 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'