我是python的新手,我试图用vobject 0.9.2
python包解析VCARD 2.1
文件。
我试图解析这个vCard文件:使用python VObject包解析VCARD文件时出错
BEGIN:VCARD
VERSION:2.1
N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:I;AM;DUMMY;;
TEL;CELL:123456789
END:VCARD
这些都是我用Python命令:
import vobject
f=open('sample.vcf','r')
vcf=vobject.readOne(f)
然后我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Anaconda3\lib\site-packages\vobject\base.py", line 1129, in readOne
allowQP))
File "C:\Program Files\Anaconda3\lib\site-packages\vobject\base.py", line 1073, in readComponents
vline = textLineToContentLine(line, n)
File "C:\Program Files\Anaconda3\lib\site-packages\vobject\base.py", line 912, in textLineToContentLine
'lineNumber' : n})
File "C:\Program Files\Anaconda3\lib\site-packages\vobject\base.py", line 336, in __init__
self.value = self.value.decode('quoted-printable')
AttributeError: 'str' object has no attribute 'decode'
链接错误日志https://paste.fedoraproject.org/391670/46866724/
Py thon显示str
对象没有任何属性decode
。
这里是VOBJECT包源代码的代码段错误发生:
if 'ENCODING' in self.params:
if 'QUOTED-PRINTABLE' in self.params['ENCODING']:
qp = True
self.params['ENCODING'].remove('QUOTED-PRINTABLE')
if 0==len(self.params['ENCODING']):
del self.params['ENCODING']
if 'QUOTED-PRINTABLE' in self.singletonparams:
qp = True
self.singletonparams.remove('QUOTED-PRINTABLE')
if qp:
self.value = self.value.decode('quoted-printable')
通过计算器阅读类似的问题,我的理解是VOBJECT包试图解码已经解码string.So我甚至试过将vcf文件转换为二进制字符串并将其作为vobject.readOne
的输入。
binstr = f.read('sample.vcf','r').encode('utf-8')
x=vobject.readOne(binstr)
但它不起作用。
我该怎么做才能成功解析VCARD
文件?
请人可以帮我...
编辑: 现在我明白了,这个错误是由于使用Python 3.我可以做任何一点的黑客攻击,克服这种错误的vobject
不兼容?
你使用Python 3吧? –
@MartijnPieters是 – anapneo
我认为你发现了一个错误'ENCODING = QUOTED-PRINTABLE'是如何处理的;该项目在Python 3上读取* Unicode字符串*,但期望'decode'方法能够正常工作。我认为https://github.com/eventable/vobject/issues/20是同样的问题。 –