[英]How to compare columns from two csv files?
我想比较2个csv文件中的列。
在file1.csv中:
aaa,1
abc,2
bcd,2
adc,3
在file2.csv中:
aaa,1
abc,0
bcd,2
adc,4
我希望得到的结果是“不公平”。
如果第一列相同但第二列不同。
我尝试了下面的代码,但没有成功:
import csv
file1 = 'C:/Users/Desktop/file1.csv'
file2 = 'C:/Users/Desktop/file2.csv'
reader1 = csv.reader(open(file1))
reader2 = csv.reader(open(file2))
for row1 in reader1:
text1 = row1[0].split(',')
test1sentence = text1[0]
test1class = text1[1]
for row2 in reader2:
text2 = row2[0].split(',')
test2sentence = text2[0]
test2class = text2[1]
if test1sentence == test2sentence:
if test1class != test2class:
print "Not Equ"
有什么建议吗?
您基本上要比较与键值匹配的词典(或地图)。
正确的方法是比较键集。 如果它们相等,则对于每个键,比较两个文件中的值。
#!/usr/bin/python
def file_to_dict(filename):
lines = open(filename).read().split()
return dict([line.split(',') for line in lines])
dict1, dict2 = file_to_dict('file1.csv'), file_to_dict('file2.csv')
print "Keys are equal? ", set(dict1.keys())==set(dict2.keys())
print "Values are equal? ", all([dict1[key]==dict2[key] for key in dict1])
您可以将文件读入两个dicts并进行比较,如下所示:
dict1 = dict(row for row in reader1 if len(row) == 2)
dict2 = dict(row for row in reader2 if len(row) == 2)
if sorted(dict1.keys()) == sorted(dict2.keys()):
if dict1 != dict2:
print "Not Equ"
dict(reader1)
将第一列转换为dict的键,将第二列转换为值。
生成器表达式(row for row in reader1 if len(row) == 2)
器1中的行的行(row for row in reader1 if len(row) == 2)
过滤掉不具有两列的行。
要比较密钥,必须对它们进行排序。 比较整个dict1 != dict2
( dict1 != dict2
)将比较排序的键值对。 因为我们首先比较了键,我们知道整个dicts之间的任何差异都是由于值。
dict1 = dict(row for row in reader1 if len(row) == 2) dict2 = dict(row for row in reader2 if len(row) == 2) for key, val in dict1.iteritems(): try: if dict2[key] != val: print "Not Equ" except KeyError: pass
您可以将其解析为字典并进行比较,如下所示:
>>> d1={'aaa':1, 'abc':2, 'bcd':2, 'adc':3}
>>> d2={'aaa':1, 'abc':0, 'bcd':2, 'adc':4}
>>> d1==d2
False
>>> d2={'aaa':1, 'abc':2, 'bcd':2, 'adc':3}
>>> d1==d2
True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.