2017-01-04 19 views
0
#!/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 

답변

0

@ 브라이언 바르셀로나, 당신의 대답에 관하여, 당신이 대신에, 알려

with open(abfile) as source_file: 
    ablist = list(vobject.readComponents(source_file)) 

그런데, 나는 소스 코드에서 보았다 vcard의 여러 구성 요소가 동일하지만 순서가 다를 수 있기 때문에 솔루션의 작동이 보장되지 않습니다. 최선의 방법은 각 관련 구성 요소를 직접 확인하는 것입니다.

+0

댓글을 주셔서 감사합니다. 나는 모든 구성 요소에 어떻게 접근 할 수 있는지 모르지만 쉬운 방법이 있습니까? 예를 들어 메모 필드에 액세스하는 방법을 모르겠습니다. 나는 중복을 검사하는 코드를 개발했지만 좋은 일을하지만, 말하기에 일부는 빠진다 ... 모든 구성 요소에 액세스 할 수 있다면 전자 메일이나 이름 같은 일부 필드가 동일한 경우 합병을 제안 할 수도 있습니다. .. 어떤 도움이 가장 환영받을 것입니다 ... –

0

NG가 작동합니다 - 통찰력은 "() 직렬화"하는 것입니다 vCard를 : 그러나

#!/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].serialize()==ablist[1].serialize() 

, 가장 환영받을 것이 ... 도움이 할 수있는 더 좋은 방법이 있어야한다! 당신이 할 수있는

ablist = [] 

with open(abfile) as source_file: 
    for vcard in vobject.readComponents(source_file): 
     ablist.append(vcard) 

: