假设我已经构建了一个名为vobj
的VObject(例如,通过vobject.readComponents(vcfStr)
构建)并想要为其添加一个新的key:value对:
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
&#34; dot&#34;符号,
以及我发现处理任意键名的唯一方法
正在使用eval()
。必须有更多的pythonic方式?
评估第一个语句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']
是否使用字符串原子或列表是否重要?