2017-03-06 213 views
0

我有一个两列csv文件。第一列包含主机名的2676项和第二列具有主机names.I的964项要比较这些列,并打印其是否有在列2中的数据而不在列1 下面是代码比较两列CSV文件

import re 
from csv import DictReader 

with open("devices.csv") as f: 
    a1 = [row["Device Name"] for row in DictReader(f)] 
#print a1 
#print len(a1) 

##下面给出我的数据的代码,第2栏

with open('dump_data', 'r') as f: 
    for line in f: 
     line = re.split(': |, |\*|\n', line) 

listOdd = line[1::2] 
for i in listOdd: 
    print i 
result[] 
# print listOdd 
for i in a1: 
    for j in listOdd: 
     if i != j: 
      result.append(i) 
     # print i 
     break 
else: 
    pass 
print result 
print len(result) 

我曾尝试其他方法,如使用集和大熊猫

的输出是不准确的,基本上在列中的每个元件2具有被比较与每个元素t与第1列。我收到很少的重复项作为差异

+2

在进行比较之前,您是否正确地获取了两列数据?你能打印2676个条目和964个主机名吗?在做任何比较之前,请确保您正确访问'csv'文件中的数据。 – davedwards

+0

请使用“devices.csv”和“dump_data”中的示例数据更新您的问题。 – stovfl

回答

0

集似乎是明显的解决方案。以下方法将每列读入它自己的set()。然后,它只需使用difference()功能给你这是在col1条目,但不是在col2(这是一样简单地使用-运营商):

import csv 

col1 = set() 
col2 = set() 

with open('input.csv') as f_input: 
    for row in csv.reader(f_input): 
     if len(row) == 2: 
      col1.add(row[0]) 
      col2.add(row[1]) 
     elif len(row) == 1: 
      col1.add(row[0]) 

print col1 
print col2 

print sorted(col2 - col1) 

因此,如果您的CSV文件中有如下条目:

aaa,aaa 
bbb,111 
ccc,bbb 
ddd,222 
eee 
fff 

所需的输出将是:

['111', '222'] 

在您的CSV文件可能需要SA数据在添加到组之前进行氮化,例如EXAMPLE.COMexample.com目前被认为是不同的。