python - 比较 2 个 csv 文件之间的列并使用 Python 编写差异
问题描述
我试图通过比较 2 个 csv 文件之间的列来打印出差异。
CSV1:
SERVER, FQDN, IP_ADDRESS,
serverA, device1.com, 10.10.10.1
serverA,device2.com,10.11.11.1
serverC,device3.com,10.12.12.1
and so on..
CSV2:
FQDN, IP_ADDRESS, SERVER, LOCATION
device3.com,10.12.12.1,serverC,xx
device679.com,20.3.67.1,serverA,we
device1.com,10.10.10.1,serverA,ac
device345.com,192.168.2.0,serverA,ad
device2.com,192.168.6.0,serverB,af
and so on...
我要做的是比较 FQDN 列并将差异写入新的 csv 输出文件。所以我的输出看起来像这样:
输出.csv:
FQDN, IP_ADDRESS, SERVER, LOCATION
device679.com,20.3.67.1,serverA,we
device345.com,192.168.2.0,serverA,ad
and so on..
我已经尝试过,但无法获得输出。
这是我的代码,请告诉我哪里出错了;
import csv
data = {} # creating list to store the data
with open('CSV1.csv', 'r') as lookuplist:
reader1 = csv.reader(lookuplist)
for col in reader1:
DATA[col[0]] = col[1]
with open('CSV2.csv', 'r') as csvinput, open('Output.csv', 'w', newline='') as f_output:
reader2 = csv.reader(csvinput)
csv_output = csv.writer(f_output)
fieldnames = (['FQDN', 'IP_ADDRESS', 'SERVER'])
csv_output.writerow(fieldnames) # prints header to the output file
for col in reader1:
if col[1] not in reader2:
csv_output.writerow(col)
(编辑)这是我使用的另一种方法:
import csv
f1 = (open("CSV1.csv"))
f2 = (open("CSV2.csv"))
csv_f1 = csv.reader(f1)
csv_f2 = csv.reader(f2)
for col1, col2 in zip(csv_f1, csv_f2):
if col2[0] not in col1[1]:
print(col2[0])
基本上,在这里我只是想首先找出是否打印了不匹配的 FQDN。但它正在打印出整个 CSV1 列。请帮助大家,对此进行了大量研究,但还没有找到运气!:(
解决方案
此代码使用内置的difflib吐出file1.csv
未出现的行,file2.csv
反之亦然。
我使用该Differ
对象来识别线路更改。我假设您不会将换行视为差异,这就是我添加sorted()
函数调用的原因。
from difflib import Differ
csv_file1 = sorted(open("file1.csv", 'r').readlines())
csv_file2 = sorted(open("file2.csv", 'r').readlines())
with open("diff.csv", 'w') as f:
for line in Differ().compare(csv_file1,csv_file2)):
dmode, line = line[:2], line[2:]
if dmode.strip() == "":
continue
f.write(line + "\n")
请注意,如果该行以某种方式不同(不仅在FQDN
列中),它将出现在diff.csv
推荐阅读
- mysql - 我可以将 SQL 关系导出到 PowerBI 吗?
- awk - 拆分和计数 AWK
- python - 自定义消息框在 pyqt5 中不返回任何值
- java - 为什么我不能在cordova cusotm插件中调用导入的android平台api类的Java方法
- blender - Blender网格在虚幻中变形
- php - 在 do while 表达式上设置参数
- c - 为什么这个程序的结果总是为零?
- javascript - React Js 组件构造函数和可见状态
- javascript - 尝试使用 Vue 将生产组件构建为 Web 组件时出错
- powershell - 从 Powershell 中的变量中删除内容