Ama*_*nda 7 thunderbird contacts
我的 Thunderbird 地址簿中有大量重复的联系人。我不想与 Google 共享它们,但我确实想找到一种方法来消除它们。有一个重复的联系人管理器插件,但它似乎已被放弃。
我可以在命令行执行此操作吗?
几年前我遇到了同样的问题,并编写了一个非常小的 python 脚本来统一 Thunderbird 地址簿的 LDIF 导出:
cat abook.ldif | unify_ldif.py > abook_new.ldif
该脚本当前匹配电子邮件地址和相同姓名上的重复条目,但这当然可以进行调整(在函数中find_existing_entry
)。这对你有用吗?
该程序在这里(编辑:您需要该python-ldap
包):
#!/usr/bin/env python
import sys
from ldif import LDIFParser, LDIFWriter
def find_existing_entry(ldif_entries, ldif_entry):
for dn, entry in ldif_entries.items():
if 'mail' in ldif_entry and 'mail' in entry:
for mail in ldif_entry['mail']:
if 'mail' in entry and mail in entry['mail']:
return dn
if 'cn' in ldif_entry and 'cn' in entry and ldif_entry['cn'][0] in entry['cn']:
return dn
if 'sn' in ldif_entry and 'sn' in entry and 'givenName' in ldif_entry and 'givenName' in entry and ldif_entry['sn'][0] in entry['sn'] and ldif_entry['givenName'][0] in entry['givenName']:
return dn
return ''
class MyLDIF(LDIFParser):
def __init__(self, input, output):
LDIFParser.__init__(self, input)
self.writer = LDIFWriter(output)
self.entries = {}
def merge(self, dn, entry):
if 'mail' in entry.keys():
if 'mail' in self.entries[dn].keys():
for mail in entry['mail']:
if mail not in self.entries[dn]['mail']:
self.entries[dn]['mail'].append(mail)
else:
self.entries[dn]['mail'] = entry['mail']
for key in entry.keys():
if key not in self.entries[dn].keys():
self.entries[dn][key] = entry[key]
def handle(self, dn, entry):
if dn in self.entries.keys():
self.merge(dn, entry)
else:
found_dn = find_existing_entry(self.entries, entry)
if found_dn != '':
self.merge(found_dn, entry)
else:
self.entries[dn] = entry
def output(self):
for dn, entry in self.entries.items():
self.writer.unparse(dn, entry)
parser = MyLDIF(sys.stdin, sys.stdout)
parser.parse()
parser.output()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1061 次 |
最近记录: |