2017-02-01 20 views
0

Если я импортировать визитную карточку с vobject так:Получить все значения атрибута в VCard с помощью питона vobject

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 

... но это только возвращает первый из каждого.

Как я нырнул в код, кажется, сущности созданы как клады. Таким образом, атрибут vcard «TEL» создается как «tel». Что, если у меня есть ячейка и рабочий номер телефона?

Я полностью застрял :-)

+0

Можете ли вы также предоставить визитную карточку, с которой работаете? – wpercy

+0

К сожалению, нет. Но я решил это тем временем, и я уточню этот вопрос позже. Я решил это с помощью getChildren() и итерации по всем строкам vcard. Таким образом я собираю всю информацию. Пример следует ... –

+0

отлично, рад, что вы смогли это выяснить – wpercy

ответ

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() 

Это работает для меня :-)

0

Вы действительно можете достичь этого, используя contents атрибут, который является словарем. Таким образом, вы сможете получить доступ список всех свойств TEL используя что-то вроде

with open(path_to_vcard) as f: 
    text = f.read() 

card = vobject.readOne(text) 
print card.contents['tel'] 

который распечатывает список всех свойств TEL (даже если есть только один или нет).