如何将联系人字典转换为 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
的情况下写入名片将忽略 BEGIN
和 END
,生成的文件将不是有效的 vCard。我不确定使用这个库是否有更方便的方法来执行此操作,但是您可以简单地创建自己的 class 继承现有的 class (或从新的调用函数)来清理代码。
我正在 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
的情况下写入名片将忽略 BEGIN
和 END
,生成的文件将不是有效的 vCard。我不确定使用这个库是否有更方便的方法来执行此操作,但是您可以简单地创建自己的 class 继承现有的 class (或从新的调用函数)来清理代码。