Как манипулировать контактами VCF с помощью VObject?
Предположим, я построил VObject под названием vobj
(например, построенный через vobject.readComponents(vcfStr)
) и хотите добавить к нему новую пару ключ: значение:
print('k=%s v=%s' % (k,v))
try:
stmnt1 = "vobj.add('%s')" % (k)
print('stmnt1:"%s"' % stmnt1)
eval(stmnt1)
print('vobj after add\n'+20*'#'+'\n')
vobj.prettyPrint()
stmnt2 = "vobj.%s.value = '%s'" % (k,v)
print('\n'+20*'#'+('\nstmnt2:"%s"' % stmnt2))
eval(stmnt2)
except Exception as e:
print('wazzup?!',e)
все дополнительные отпечатки и try:except
потому что я не могу заставить это работать! Вот результат производства:
k=bday v=1931-02-10
stmnt1:"vobj.add('bday')"
vobj after add
####################
VCARD
VERSION: 3.0
PRODID: -//Apple Inc.//Mac OS X 10.12.3//EN
N: Foo Bar
FN: Foo Bar
EMAIL: foo@bar.com
params for EMAIL:
TYPE ['INTERNET', 'WORK', 'pref']
...
BDAY:
####################
stmnt2:"vobj.bday.value = '1931-02-10'"
wazzup?! invalid syntax (<string>, line 1)
у меня есть три конкретных вопроса:
VObject использует
object.attribute
"точечная" нотация, и единственный способ обработки произвольных имен ключей - это использованиеeval()
, должен быть более питонический путь?оценка первого высказывания
stmnt1
работает и меняетvobj
как и ожидалось, создание свободного слота дляBDAY
, ноstmnt2
терпит неудачу с плохим синтаксисом, и я не знаю почему.я тоже пробовал
stmnt2 = "vobj.%s.value = ['%s']" % (k,v)
, делая значение списком, из-за двух альтернатив в VObject README:j.email.value = 'jeffrey@osafoundation.org' ... j.org.value = ['Open Source Applications Foundation']
имеет ли значение строковый атом или список?