加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何使用python-magic 5.19-1

发布时间:2020-12-20 12:07:11 所属栏目:Python 来源:网络整理
导读:我需要在 python3中从没有后缀的文件中确定MIME类型,我认为python-magic是一个合适的解决方案. 不幸的是它不能像这里描述的那样工作: https://github.com/ahupp/python-magic/blob/master/README.md 这是怎么回事: import magic magic.from_file("testdata
我需要在 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>",in <module>
TypeError: __init__() missing 1 required positional argument: 'ms'
>>> m = magic.Magic()
Traceback (most recent call last):
  File "<stdin>",in <module>
TypeError: __init__() missing 1 required positional argument: 'ms'
>>>

我找不到任何关于如何在任何地方使用Magic类的信息,所以我继续进行试验和错误,直到我发现它只接受ms的LP_magic_set实例.
其中一些是由模块的方法返回的
magic.magic_set()和magic_t().
所以我试图将Magic与其中任何一个实例化.
当我从实例调用file()方法时,它将始终返回一个空结果,并且errlvl()方法告诉我错误号. 22.
那我怎么用魔法呢?

解决方法

我认为你混淆了“python-magic”的不同实现

您似乎已经安装了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'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读