使用python vobject获取vcard中属性的所有值

时间:2017-02-01 09:21:18

标签: python vcard vobject

如果我使用vobject导入vcard:

with open(some_file_containing_a_vcard,
                  "r" , encoding="utf-8") as fd:
            vcard_content = vobject.readOne(fd.read(),
                                            ignoreUnreadable=True)

如果vcard提供多个电话号码或电子邮件,我如何获得所有电话号码或电子邮件?

我只找到了:

vcard_content.tel.value
vcard_content.email.value

...但这仅返回每个中的第一个。

当我潜入代码时,似乎实体被创建为clases。所以vcard的属性" TEL"被创建为" tel"。如果我有一个小区和一个工作电话号码怎么办?

我完全陷入困境: - )

2 个答案:

答案 0 :(得分:1)

您可以使用x_train, x_validation, y_train, y_validation = model_selection.train_test_split(x,y,test_size=self.validation_size,random_state=self.seed,stratify=y属性实际实现此目的,该属性是字典。因此,您可以使用类似

的内容访问所有TEL属性的列表
contents

将打印所有TEL属性的列表(即使只有一个或没有)。

答案 1 :(得分:0)

我使用以下代码片段解决了这个问题:

stream = io.open(some_file_containing_a_vcard, "r", encoding="utf-8")
vcf = vobject.readComponents(stream, ignoreUnreadable=True)

for child in vcard.getChildren():
    name = child.name.lower()
    value = child.value
    attribs = child.params.get("TYPE", [])

    filtered_type = [x.lower() for x in attribs if x.lower() in (
                        "work", "home", "cell", "fax"
                    )]
    if len(filtered_type) == 0:
        filtered_type = ["unspec"]

    # Do something with it... i.e. adding to a dict()

stream.close()

这对我有用: - )