Я новичок в python. Я пытаюсь разобрать VCARD 2.1
файл с помощью vobject 0.9.2
пакета python.
Я пытаюсь разобрать этот VCARD файл:Ошибка в анализе файла VCARD с использованием пакета python VObject
BEGIN:VCARD
VERSION:2.1
N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:I;AM;DUMMY;;
TEL;CELL:123456789
END:VCARD
Таков питон команда, которые я использовал:
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')
Читая подобные проблемы в StackOverflow Я понимаю, что vobject пакет пытается декодировать уже декодируется string.So я даже пытался преобразование файла vcf в двоичную строку и предоставление этого в качестве значения vobject.readOne
.
binstr = f.read('sample.vcf','r').encode('utf-8')
x=vobject.readOne(binstr)
но он не работает.
Что мне нужно сделать, чтобы успешно разобрать VCARD
файл?
Пожалуйста, кто-нибудь мне помочь ...
EDIT: Теперь я понимаю, что эта ошибка происходит из-за несовместимости vobject
с питоном 3. Могу ли я сделать любой маленький хак, чтобы преодолеть эту ошибку?
Вы используете Python 3, возможно? –
@MartijnPieters yes – anapneo
Я думаю, вы обнаружили ошибку в том, как обрабатывается 'ENCODING = QUOTED-PRINTABLE'; проект читает * строки Unicode * на Python 3, но ожидает, что метод 'decode' будет работать. Я думаю, что https://github.com/eventable/vobject/issues/20 - та же проблема. –