我正在尝试对 OS X 上的一个非常大的地址簿进行一些修复。我想以编程方式进行此操作,因为手动操作将是一项非常艰巨的工作。出于预感,鉴于我对 Python 的熟悉,我想我可能会为此使用 PyObjC。
我可以使用 PyObjC 的模块 AddressBook 来查看,但我似乎无法进行任何更改:
>>> import AddressBook
>>> ab = AddressBook.ABAddressBook.addressBook()
>>> p = ab.people()[0]
>>> p.isReadOnly()
True
>>> p.valueForProperty_('First')
u'Foo'
>>> p.setValue_forProperty_('Bar', 'First')
False
>>> p.valueForProperty_('First')
u'Foo'
>>> type(p)
<objective-c class ABPerson at 0x7fff76e01ab8>
我的第一个问题是我可以这样编辑/修改联系人/人员吗?我的第二个问题是,对于这种工作,我还可以使用 AppleScript 甚至 PyObjC(或其他)使用 ScriptingBridge 与联系人应用程序对话来更改联系人。这会比使用“低级”API 更好吗?
编辑 我尝试了更多方法,普通的旧 AppleScript 和使用 ScriptingBridge 的 Python。我对联系人进行脚本修改的所有方法都失败了,即使我调用了通讯簿的 save() 方法。我是否需要编辑一些系统设置以允许为联系人编写脚本?
编辑 作为记录,我正在运行 OS X Mountain Lion 10.8.3