我有一个逗号分隔的文本文件,其内容有点像这样:
pickle_4500@dill.chile, pickle_4501@dill.chile, pickle_4502@dill.chile, pickle_4503@dill.chile, pickle_4504@dill.chile, pickle_4505@dill.chile
我们称之为emails1.csv
。我也有另一个以逗号分隔的文本文件:
pickle_4503@dill.chile, pickle_4505@dill.chile
我们称之为emails2.csv
。我需要使用Python从emails2.csv
中减去emails1.csv
。在伪代码中:
emails1.csv = emails1.csv - emails2.csv
Python的总处女,但我根据我发现的几个例子做了这个。它做了我认为的吗?也就是说,从emails2.csv
中取出emails1.csv
中的电子邮件,并将差异放在名为subtractomatic.csv
的文件中。
from sets import Set
import csv
fin = open('emails1.csv', 'rb')
reader = csv.reader(fin)
email_list1 = list(reader)[0]
fin = open('emails2.csv', 'rb')
reader = csv.reader(fin)
email_list2 = list(reader)[0]
email_list1 = list(set(email_list1)-set(email_list2))
fout = open('subtractomatic.csv', 'wb')
writer = csv.writer(fout, quoting=csv.QUOTE_NONE)
writer.writerow(email_list1)
fout.close()
fin.close()
fin.close()
我认为这样做是因为我的原始文件emails1.csv
中包含X
封电子邮件,当我打开subtractomatic.csv
时,其中有电子邮件,当我运行时} p>
grep @ -o subtractomatic.csv | wc -l
在终端中我得到X/2
,这是有道理的,因为emails1.csv
的电子邮件数量是emails2.csv
的两倍---按设计。然而,我也是一个新手,所以我不知道我正在看这件事。
答案 0 :(得分:2)
使用sets查找两个列表之间的差异,然后将结果分配回列表1. sets模块提供用于构造和操作唯一元素的无序集合的类。常见用途包括成员资格测试,从序列中删除重复项,以及计算集合上的标准数学运算,例如交集,并集,差异和对称差异。
>>> l1 = ['pickle_4500@dill.chile', 'pickle_4501@dill.chile', 'pickle_4502@dill.chile', 'pickle_4503@dill.chile', 'pickle_4504@dill.chile', 'pickle_4505@dill.chile']
>>> l2 = ['pickle_4503@dill.chile', 'pickle_4505@dill.chile']
>>> set(l1)-set(l2)
{'pickle_4500@dill.chile', 'pickle_4502@dill.chile', 'pickle_4504@dill.chile', 'pickle_4501@dill.chile'}
>>> list(set(l1)-set(l2))
['pickle_4500@dill.chile', 'pickle_4502@dill.chile', 'pickle_4504@dill.chile', 'pickle_4501@dill.chile']
>>> l1 = list(set(l1)-set(l2))
>>> l1
['pickle_4500@dill.chile', 'pickle_4502@dill.chile', 'pickle_4504@dill.chile', 'pickle_4501@dill.chile']
答案 1 :(得分:2)
您可以使用套装:
difference = set(listA) - set(listB)
答案 2 :(得分:0)
您可以将B
设为set
并从A
过滤掉其内容,而不是其他人使用的所有设置方法:
b_set = set(B)
a_filtered = [a for a in A if a not in b_set]
这样做的好处是可以在A
中保持a_filtered
的顺序(没有您要删除的元素)......