#!/usr/bin/env python2.3
"""
This script gives a short example on how to use the addressbook framework,
it creates an CSV file containing information about all entries in the
addressbook.
Usage:
python exportBook.py output.csv
"""
import csv
import sys
import AddressBook
# The names of fields in the export, and the corresponding property.
FIELD_NAMES=(
('Last Name', AddressBook.kABLastNameProperty),
('First Name', AddressBook.kABFirstNameProperty),
('E-mail', AddressBook.kABEmailProperty),
)
def encodeField(value):
"""
Encode a value into an UTF-8 string
"""
if value is None:
return ''
if isinstance(value, AddressBook.ABMultiValue):
# A multi-valued property, merge them into a single string
result = []
for i in range(len(value)):
result.append(value.valueAtIndex_(i).encode('utf-8'))
return ', '.join(result)
return value.encode('utf-8')
def personToFields(person, fieldnames):
""" Extract the specified fields from a person object """
return [ encodeField(person.valueForProperty_(nm)) for nm in fieldnames ]
def bookFields(book, fieldnames):
""" Generate the records for all people in the book """
for person in book.people():
yield personToFields(person, fieldnames)
def main(argv = None):
""" main entry point """
if argv is None:
argv = sys.argv[1:]
if len(argv) != 1:
print "Usage: python exportBook.py output.csv"
sys.exit(1)
book = AddressBook.ABAddressBook.sharedAddressBook()
fp = open(argv[0], 'wb')
csvStream = csv.writer(fp)
csvStream.writerow([ f[0] for f in FIELD_NAMES])
for row in bookFields(book, [ f[1] for f in FIELD_NAMES]):
csvStream.writerow(row)
fp.close()
if __name__ == "__main__":
main()
|