2

I might be very stupid here, and my knowledge about Python is nearly at 0.

I get a vcard from my Mac Contacts - I can access it and transform most of the data. Simple outputs are easy. I lack when I want to access data which is divided - I would call it an array, or dict or list...

Simple task: I want to get the first name, last name and middle name: Here is my test card:

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:johnDoe@example.org
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

So the field I want to get is "N" - so when I try:

vcard.n.value

I get: John Doe

vCard.n.value.family

I get: Doe

vcard.n.value.name

I get:

AttributeError: 'Name' object has no attribute 'name'

vCard.n

I get: <N{} John Doe >

So what's this structure: <N{} John Doe > ??

Could somebody give me a few hints?

I want to extract first and last name from a VCF with Vobject. But I can only get the full name (fn) or the name with some spaces.

Barmar
  • 741,623
  • 53
  • 500
  • 612
Nils
  • 21
  • 1
  • `vCard.n` is an instance of the `Name` class, and `` is how the class defines its printed representation. – Barmar Aug 04 '23 at 18:12
  • In Python, classes can customize the string and printed representation of their instances, by defining `__str__` and `__repr__` methods. – Barmar Aug 04 '23 at 18:14
  • Thanks for the support. So this instance of 'Name' carries a String ' John Doe' - it does not make any difference at all? I thought this might be an array, dict or list and I can access the different values. – Nils Aug 06 '23 at 16:47
  • Look at the documentation of the `vObject` library, it should tell you the classes of all its objects. – Barmar Aug 07 '23 at 14:44

0 Answers0