#!/usr/bin/env python2.7
import vobject
abfile='/foo/bar/directory/file.vcf' #ab stands for address book
ablist = []
with open(abfile) as source_file:
for vcard in vobject.readComponents(source_file):
ablist.append(vcard)
print ablist[0]==ablist[1]
위의 코드는 True를 반환해야하지만, 그것은으로 vCard는 비록 다른 고려하지 않기 때문에 그들은 동일합니다. 궁극적 인 목적 중 하나는 vcard 파일에서 중복을 제거하는 방법을 찾는 것입니다. 보너스 포인트 :는 비교, vCard 연락처 중복을 제거하려면
set(ablist)
중복을 제거하려면 다음과 같은 파이썬에서 목록을 uniqify하는 빠른 방법 중 하나를 사용하여와 비교가 호환되도록 할 수있는 방법이 있습니까? (예 : vcard를 문자열로 변환하는 등 ...).
print ablist[0].fn==ablist[1].fn
: 대신 전체의 vCard를 비교하는 우리가 같이 그것의 하나 개의 구성 요소를 비교한다면 렌 위의 코드에서 (세트 (ablist는))이 예상대로 1이 아닌 ... 대조적으로
을 반환
는 우리는 (두 개의 동일한 vCard를로) 여기
테스트에 사용 된 파일의 내용입니다 ... 예상 행동을보고 응답 True로 받게됩니까 : 나는 followi를 발견BEGIN:VCARD
VERSION:3.0
FN:Foo_bar1
N:;Foo_bar1;;;
EMAIL;TYPE=INTERNET:[email protected]
END:VCARD
BEGIN:VCARD
VERSION:3.0
FN:Foo_bar1
N:;Foo_bar1;;;
EMAIL;TYPE=INTERNET:[email protected]
END:VCARD
댓글을 주셔서 감사합니다. 나는 모든 구성 요소에 어떻게 접근 할 수 있는지 모르지만 쉬운 방법이 있습니까? 예를 들어 메모 필드에 액세스하는 방법을 모르겠습니다. 나는 중복을 검사하는 코드를 개발했지만 좋은 일을하지만, 말하기에 일부는 빠진다 ... 모든 구성 요소에 액세스 할 수 있다면 전자 메일이나 이름 같은 일부 필드가 동일한 경우 합병을 제안 할 수도 있습니다. .. 어떤 도움이 가장 환영받을 것입니다 ... –