2017-01-04 13 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のは、たとえ異なると考えられているしていないため、彼ら同じだ。究極の目的の1つは、vcardファイルから重複を削除する方法を見つけることです。ボーナスポイント:は、比較、vCard連絡先重複を削除するには

set(ablist) 

重複を削除するには、次のようなPythonでリストをuniqifyするために、高速のいずれかの方法を使用してとの比較は互換性を持たせるための方法はありますか? (例えば、何とかvCardを文字列に変換する...)。 LEN(セット(ablist))上記のコードで予想通り2としない1を返し...

対照的に、代わりに全体のvCardを比較し、我々は同様に、それの一つの成分を比較する場合:

print ablist[0].fn==ablist[1].fn 

はその後、我々は(2つだけの同一のvCardで)ここで

は、テストで使用されるファイルの内容です...期待される動作を確認し、応答として真の受信ん:私は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

@Brianバルセロナは、あなたの答えについて、ちょうどあなたの代わりに、知っているように

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) 

関連する問題