【发布时间】:2019-02-06 10:45:05
【问题描述】:
这是 .vcf 文件数据中的内容。
BEGIN:VCARD
VERSION:4.0
N:Muller;CCCIsabella;;;
FN:Muller
ORG:Bubba Gump Shrimp Co.
TITLE:Shrimp Man
PHOTO;MEDIATYPE=image/gif:http://www.example.com/dir_photos/my_photo.gif
TEL;TYPE=work,voice;VALUE=uri:tel:+16829185770
REV:20080424T195243Z
END:VCARD
BEGIN:VCARD
VERSION:4.0
N:Mraz;CCCEdwardo;;;
FN:Mraz
ORG:Bubba Gump Shrimp Co.
TITLE:Shrimp Man
PHOTO;MEDIATYPE=image/gif:http://www.example.com/dir_photos/my_photo.gif
TEL;TYPE=work,voice;VALUE=uri:tel:+18083155095
REV:20080424T195243Z
END:VCARD
BEGIN:VCARD
VERSION:4.0
N:Reynolds;CCCBrant;;;
FN:Reynolds
ORG:Bubba Gump Shrimp Co.
TITLE:Shrimp Man
PHOTO;MEDIATYPE=image/gif:http://www.example.com/dir_photos/my_photo.gif
TEL;TYPE=work,voice;VALUE=uri:tel:+15089473508
REV:20080424T195243Z
END:VCARD
我希望我的数据如下所示。
data = [{'name': 'Muller','phone': '+16829185770'}, {'name': 'Mraz', 'phone': '+18083155095'}, {'name': 'Reynolds','phone': '+15089473508'}]
但我没有得到上述数据。在这种情况下请帮助我。这里我使用re python包来解决。
import re
file = open('contacts.vcf', 'r')
contacts = []
for line in file:
name = re.findall('FN:(.*)', line)
tel = re.findall('tel:(.*)', line)
nm = ''.join(name)
tel = ''.join(tel)
if len(nm) == 0 and len(tel) == 0:
continue
data = {'name' : nm, 'phone' : tel}
contacts.append(data)
print(contacts)
得到下面的结果名称和电话正在添加不同的。
[{'name': 'Muller', 'phone': ''}, {'name': '', 'phone': '+16829185770'}, {'name': 'Mraz', 'phone': ''}, {'name': '', 'phone': '+18083155095'}, {'name': 'Reynolds', 'phone': ''}, {'name': '', 'phone': '+15089473508'}]
【问题讨论】:
-
对于遇到这个问题的任何人,我建议遵循 Reid Ballard 的建议并使用专用模块来解析 VCF 文件,例如 PyVCF 或 allel’s read_vcf function
-
或vobject,最适合我的需求