如何将联系人词典转换为vcard(*。vcf文件)?

时间:2019-08-06 01:55:45

标签: python vcard

我正在使用python处理某些vcard文件。我已将vcard文件解析为字典。现在,我想在编辑后将其保存到新的vcf文件中。我找不到任何解决方案。是否有任何库或模块可以解析vcard中的python词典?

person = {'n': 'Forrest Gump',
          'fn': 'Forrest Gump', 'tel': '(111) 555-1212',
          'email': 'forrestgump@example.com',
          'photo': ';http://www.example.com/dir_photos/my_photo.gif',
          'adr': 'Kathmandu, Nepal'}

在给这本字典时,我想获得如下的vcf文件。

BEGIN:VCARD
VERSION:3.0
N:Gump;Forrest;;Mr.;
FN:Forrest Gump
TITLE:Shrimp Man
PHOTO;VALUE=URI;TYPE=GIF:;http://www.example.com/dir_photos/my_photo.gif
EMAIL:forrestgump@example.com
END:VCARD

1 个答案:

答案 0 :(得分:1)

您可能应该在http://eventable.github.io/vobject/此处查看vobject

import vobject

person = {'n': 'Forrest Gump',
          'fn': 'Forrest Gump', 'tel': '(111) 555-1212',
          'email': 'forrestgump@example.com',
          'photo': ';http://www.example.com/dir_photos/my_photo.gif',
          'adr': 'Kathmandu, Nepal'}

vcard = vobject.readOne('\n'.join([f'{k}:{v}' for k, v in person.items()]))
vcard.name = 'VCARD'
vcard.useBegin = True
vcard.prettyPrint()

with open('test.vcf', 'w', newline='') as f:
    f.write(vcard.serialize())

请注意,写入未设置.name.useBegin的卡将省略BEGINEND,并且生成的文件将不是有效的vCard。我不确定是否可以使用该库来执行此操作,但是您可以简单地创建一个从现有类继承的类(或从新类调用函数)来清理代码。