我需要在Windows上获取一些文件的MIME类型,因此我已经安装了
这显然是因为Python试图将文本文件
我缺少哪些文件?
python-magic
(在32位python 2.7.3上)。
它依赖于Unix magic
库。
作者指导从gnuwin32项目获取regex2.dll
、zlib1.dll
和magic1.dll
。
所以我将这些文件保存到一个文件夹中,并将该文件夹添加到我的系统PATH
中。
现在当我执行magic
方法时,会出现缺少文件的异常:import magic
print(magic.Magic())
Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/lex/lex.py", line 367, in <module>
test_magic()
File "C:/Users/Admin/PycharmProjects/lex/lex.py", line 364, in test_magic
print(magic.Magic())
File "C:\Python27\lib\site-packages\python_magic-0.4.3-py2.7.egg\magic.py", line 52, in __init__
magic_load(self.cookie, magic_file)
File "C:\Python27\lib\site-packages\python_magic-0.4.3-py2.7.egg\magic.py", line 188, in magic_load
return _magic_load(cookie, coerce_filename(filename))
File "C:\Python27\lib\site-packages\python_magic-0.4.3-py2.7.egg\magic.py", line 139, in errorcheck
raise MagicException(err)
magic.MagicException: could not find any magic files!
DLL文件在PATH路径中,我尝试调试并且magic1.dll
已经正确地定位,但是在库内部的某个地方抛出了异常。
在gnuwin32
包中,我找到了magic
和magic.mgc
。我将它们放到同一个文件夹中,结果得到了WindowsError: [Error 126]
。
libmagic = None
# Let's try to find magic or magic1
dll = ctypes.util.find_library('magic') or ctypes.util.find_library('magic1')
# This is necessary because find_library returns None if it doesn't find the library
if dll:
libmagic = ctypes.CDLL(dll)
这显然是因为Python试图将文本文件
magic
作为dll打开。在代码中添加.dll
后缀名后,我得到了相同的错误信息:magic.MagicException: 找不到任何魔法文件!
。我缺少哪些文件?
更新:
C:\Users\Admin>file C:\123.zip -m magic
file: could not find any magic files!
C:\Users\Admin>file C:\123.zip -m "C:\@DEV\@LIB\@Magic\GetGnuWin32\bin\magic"
C:\123.zip; ASCII text, with no line terminators
C:\Users\Admin>cd C:\@DEV\@LIB\@Magic\GetGnuWin32\bin
C:\@DEV\@LIB\@Magic\GetGnuWin32\bin>file C:\123.zip -m magic
C:\123.zip; ASCII text, with no line terminators
更新2(已解决):
print(magic.Magic())
magic.MagicException: could not find any magic files!
print(magic.Magic(magic_file = 'magic'))
<magic.Magic instance at 0x02A5E198>
刚才需要明确指定文件