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

How to convert a dictionary of contacts into a vcard (*.vcf file)?

我正在 python 中处理一些 vcard 文件。我已将 vcard 文件解析为字典。现在我想把它编辑后保存到一个新的vcf文件中。我找不到任何解决方案。是否有任何库或模块解析 vcards 中的 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

你应该看看 vobject 这里 http://eventable.github.io/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。我不确定使用这个库是否有更方便的方法来执行此操作,但是您可以简单地创建自己的 class 继承现有的 class (或从新的调用函数)来清理代码。