从 Python 中的 VObject 访问姓名、名字...

问题描述 投票:0回答:1

我可能很笨,我对Python的了解几乎为0。

我从 Mac 联系人中获得了一张电子名片 - 我可以访问它并转换大部分数据。简单的输出很容易。当我想要访问划分的数据时,我缺乏 - 我将其称为数组,或字典或列表......

简单的任务:我想获取名字、姓氏和中间名:这是我的测试卡:

BEGIN:VCARD
VERSION:3.0
N:Doe;John;;;
FN:John Doe
ORG:Example.com Inc.;
TITLE:Imaginary test person
EMAIL;type=INTERNET;type=WORK;type=pref:[email protected]
TEL;type=WORK;type=pref:+1 617 555 1212
TEL;type=WORK:+1 (617) 555-1234
TEL;type=CELL:+1 781 555 1212
TEL;type=HOME:+1 202 555 1212
item1.ADR;type=WORK:;;2 Enterprise Avenue;Worktown;NY;01111;USA
item1.X-ABADR:us
item2.ADR;type=HOME;type=pref:;;3 Acacia Avenue;Hoemtown;MA;02222;USA
item2.X-ABADR:us
NOTE:John Doe has a long and varied history\, being documented on more police files that anyone else. Reports of his death are alas numerous.
item3.URL;type=pref:http\://www.example/com/doe
item3.X-ABLabel:_$!<HomePage>!$_
item4.URL:http\://www.example.com/Joe/foaf.df
item4.X-ABLabel:FOAF
item5.X-ABRELATEDNAMES;type=pref:Jane Doe
item5.X-ABLabel:_$!<Friend>!$_
CATEGORIES:Work,Test group
X-ABUID:5AD380FD-B2DE-4261-BA99-DE1D1DB52FBE\:ABPerson
END:VCARD

所以我想要得到的字段是“N” - 所以当我尝试时:

vcard.n.value

我得到:

John  Doe

vCard.n.value.family

我得到:

Doe

vcard.n.value.name

我得到:

属性错误:“名称”对象没有属性“名称”

vCard.n

我得到:

<N{} John  Doe >

那么这个结构是什么: ??

有人可以给我一些提示吗?

我想使用 Vobject 从 VCF 中提取名字和姓氏。但我只能得到全名(fn)或带有一些空格的名字。

python extract vcf-vcard vobject
1个回答
0
投票

在 vobject 中,N 的值是结构化的,正如您所发现的。

感兴趣的属性是:

  • 前缀
  • 给定
  • 额外
  • 家人
  • 后缀

所以在你提到的具体情况下,你会想要

vcard.n.value.given

获取“John Doe”的“John”值。

您可以通过在解释器提示符下使用

dir()
功能来发现这一点。

>>> import vobject
>>> vcard = vobject.newFromBehavior('vcard')
>>> n = vcard.add('n')
>>> dir(n.value)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'additional', 'family', 'given', 'prefix', 'suffix', 'toString']
>>>

带有双下划线前缀/后缀的属性基本上是语言/解释器的实现细节。

toString
属性是用于对列表进行字符串化的内部函数。

© www.soinside.com 2019 - 2024. All rights reserved.