我有一个包含两列的csv文件。第一列包含2676个主机名条目,第二列包含964个主机名条目。我想比较这些列并打印第2列但不在第1列中的数据 这是代码
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列中的每个元素都必须与第1列的每个元素进行比较。我得到的重复条目差异很少
答案 0 :(得分:0)
集合似乎是一个明显的解决方案。以下方法将每列读入其自己的net::ERR_EMPTY_RESPONSE
。然后,它只是使用difference()
函数为您提供set()
但不在col1
中的条目(这与仅使用col2
运算符相同):
-
因此,如果您的CSV文件包含以下条目:
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)
所需的输出是:
aaa,aaa
bbb,111
ccc,bbb
ddd,222
eee
fff
CSV文件中的数据在添加到集合之前可能需要进行清理,例如['111', '222']
和EXAMPLE.COM
目前被视为不同。