如何使用VObject操作VCF联系人?

时间:2018-01-16 03:24:31

标签: python vobject

假设我已经构建了一个名为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)

我有三个具体问题:

  1. VObject使用object.attribute&#34; dot&#34;符号, 以及我发现处理任意键名的唯一方法 正在使用eval()。必须有更多的pythonic方式?

  2. 评估第一个语句stmnt1是否有效,以及更改 按预期vobj生成BDAY的未绑定广告位。 但stmnt2因语法错误而失败,我不知道原因。

  3. 我也尝试了stmnt2 = "vobj.%s.value = ['%s']" % (k,v),因为这两个值使得值成为一个列表 VObject README上的替代方案:

     j.email.value = 'jeffrey@osafoundation.org'
     ...
     j.org.value = ['Open Source Applications Foundation']
    

    是否使用字符串原子或列表是否重要?

0 个答案:

没有答案