比较两个csv文件的内容并将其存储到变量中

问题描述:

我真的很陌生,我有两个csv文件。第一个(more.csv)具有比较两个csv文件的内容并将其存储到变量中

A123,B456,C789 

第二个(less.csv)的含量为

B456 

我想这样的内容,当他们是相同的,他们存放的类似项目到一个名为

变量“相同的”我想,这会喜欢的东西开始:

more = open('more.csv','r') 
less= open('less.csv','r') 
for item in unitid: 

谢谢。

+0

你是什么意思“当他们是相同的”?你是说当他们都包含相同的价值,例如都有B456? – 2012-08-01 23:20:39

+0

@Rory Hart:是的。 – user1546610 2012-08-01 23:23:32

+0

你的csv文件只包含一行;如果没有的话,请至少第二排举例 – jfs 2012-08-01 23:39:43

如果他们只有一条线,你可以使用设置对象(蟒内置)对它们进行比较,例如:

>>> a = ['A123','B456','C789','D007'] 
>>> b = ['B456','D007','E009'] 
>>> c = list(set(a).intersection(b)) 
>>> print c 
['B456', 'D007'] 

完整的方法,从文件比较会是什么样子:

def compare(fileA, fileB): 
    a_file = open(fileA, 'r') 
    a_data = a_file.read() 
    a_file.close() 

    b_file = open(fileB, 'r') 
    b_data = b_file.read() 
    b_file.close() 

    # compare the contents 
    a_set = set(a_data.split(',')) 
    b_set = set(b_data.split(',')) 

    return list(a_set.intersection(b_set)) 

compare('more.csv', 'less.csv') 

如果它们每个文件多于一行,那么你仍然可以使用它,你只需要修改它 - 我想将交叉存储到代表行的数组中在线相似之处。

一旦处理您的CSV文件到列表中,您可以使用collections.Counter找到重复:

from collections import Counter 

# after processing your CSV files into two lists: 
more_list = ['A123', 'B456', 'C789', 'D007'] 
less_list = ['B456', 'D007', 'E009'] 

dupe_counter = Counter(more_list) 
dupe_counter.update(less_list) 
same_list = [val for val in dupe_counter if dupe_counter[val] > 1] 
# same_list will be: ['B456', 'D007'] 
+0

有没有办法不使用列表,但只是csv.reader和for循环? – user1546610 2012-08-01 23:34:13