Как манипулировать контактами VCF с помощью VObject?Python

Программы на Python
Anonymous
Как манипулировать контактами VCF с помощью VObject?

Сообщение Anonymous »

Предположим, я создал 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)
все дополнительные отпечатки и попытки:кроме связаны с тем, что я не могу
заставить это работать! вот результат:

Код: Выделить всё

  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 (, line 1)
У меня есть три конкретных вопроса:
  • VObject использует object.attribute в виде «точки»,
    и единственный способ обработки произвольных имен ключей, который я нашел,
    — это использование eval(). должен быть более питонический способ?
  • вычисление первого оператора stmnt1 работает и меняется , как и ожидалось, создает несвязанный слот для BDAY.
    но stmnt2 завершается сбоем из-за неправильного синтаксиса, и я не знаю почему.
  • Я также попробовал stmnt2 = "vobj.%s.value = ['%s']" %
    (k,v), превратив значение в список, из-за двух
    альтернатив в README VObject:

    Код: Выделить всё

     j.email.value = 'jeffrey@osafoundation.org'
    ...
    j.org.value = ['Open Source Applications Foundation']
    
    имеет ли значение, используется ли строковый атом или список?


Подробнее здесь: https://stackoverflow.com/questions/482 ... ng-vobject

Вернуться в «Python»