一方が他方にあるかどうかを確認するだけの場合 (頻度などは気にしない場合)、 を使用set
して各ファイルから一意の出現を保存しintersection
、2 つのセットの を見つけることができます。これは、両方のファイルに存在する電子メールを表します ( with
2 つのファイルを含むステートメントは Python2.7+ の機能であることに注意してください)。
>>> l1 = set()
>>> l2 = set()
>>> with open('FILEA.txt', 'rb') as f1, open('FILEB.txt', 'rb') as f2:
... for line in f1.readlines():
... l1.add(line.strip())
... for line in f2.readlines():
... l2.add(line.strip())
...
>>>
>>> l1
set(['another@gmail.com', 'andanother@hotmail.com', 'this@email.com'])
>>> l2
set(['unique@somehost.com', 'this@email.com', 'not@example.com'])
>>> l1 & l2
set(['this@email.com'])
セットを使用すると、他の (潜在的に) 役立つ操作を実行することもできます。
両方のセット (結合) にあるアイテムを識別します。
>>> l1 | l2
set(['another@gmail.com', 'unique@somehost.com', 'andanother@hotmail.com', 'this@email.com', 'not@example.com'])
一方のセットに含まれているが他方のセットに含まれていないアイテム (違い):
>>> l1 - l2
set(['another@gmail.com', 'andanother@hotmail.com'])
>>> l2 - l1
set(['not@example.com', 'unique@somehost.com'])
各セットに固有のアイテム (和集合から交差部分を引いたものと考えてください) (symmetric_difference):
>>> l1 ^ l2
set(['another@gmail.com', 'not@example.com', 'unique@somehost.com', 'andanother@hotmail.com'])
最後に、演算子の代わりにメソッドを使用してこれらの操作を実行することもできます。メソッドを使用するには、セットを取得し、上記の括弧内の名前の 1 つを追加して、もう 1 つのセットを引数にします。
>>> l1.intersection(l2)
set(['this@email.com'])
私のファイルは次のようになりました:
FILEA.txt
this@email.com
another@gmail.com
andanother@hotmail.com
FILEB.txt
not@example.com
this@email.com
unique@somehost.com