比较 2 个 csv 文件之间的列并使用 Python 写入差异

2024-05-02

我试图通过比较 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 https://docs.python.org/3.6/library/difflib.html吐出这些行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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较 2 个 csv 文件之间的列并使用 Python 写入差异 的相关文章

随机推荐

  • 调用 new SqlConnection() 会挂起程序

    这个把我难住了 我什至没有尝试连接到数据库 当这段代码到达我实例化一个新的 SqlConnection 对象的行时 它只是挂在那里 不会抛出异常或任何东西 我已经尝试将其编译为2 0 3 5和4 0 它们都挂了 当然 它也适用于我的机器和你
  • 为什么我的 git 预提交钩子不修剪行尾的空白?

    我在 Mac Mojave 上 我在 git templates hooks pre commit 创建了一个文件 我想删除我正在提交的文件行尾的空格 我希望这种情况在全球范围内发生在我的所有项目中 A git hook script to
  • 有没有办法为数据表绘制UMAP或t-SNE图?

    我有一个巨大的文件 下面是一小部分数据 如下所示 我想绘制一个 PCA 我可以使用 PCA 函数绘制 PCA 但它看起来有点乱 因为我有 200 列 所以我想也许 t SNE 或 UMAP 效果更好 但我无法使用它们进行绘图 我想在图中显示
  • Python GTK 信号处理程序不工作

    我正在使用 GTK 为 GUI 编写一个 Python 应用程序 我注意到从终端使用 Ctrl C 关闭它不起作用 我发现这是因为一个错误 所以我尝试手动处理该信号 问题是 如果我将默认行为设置为默认行为 则会捕获信号并正确关闭应用程序 但
  • 我如何从 Rust 的 Vec 中获取项目?

    我正在寻找一种方法consumes a Vec并返回一个元素 无需恢复的开销Vec的不变量的方式remove and swap remove do fn take
  • Gradle:根据配置文件加载属性文件

    我想编写一个 gradle 构建脚本 它可以在不同的环境 开发 实时 中工作 在每个环境中 我必须加载不同的属性集 目标目录 数据库等 是否有一种 gr adle 方法可以读取依赖于环境或配置文件的属性文件 您可能想查看Gradle 属性插
  • # 的未定义方法“type_cast”(NoMethodError)

    ActiveRecord ConnectionAdapters Column曾经有一个方法叫做type cast它接受一个字符串并将其转换为 到适当的实例 这似乎在某个时候被删除了 我不知道应该做什么来替换它 这是使用它的代码 Create
  • iOS 7 中强制横向 ViewController

    我有十多个处于纵向模式的 ViewController 但无论设备的方向如何 我都需要强制一个处于横向模式 这是解决方案 1 将 LandscapeViewController 嵌入到子类 NavigationController 中 并使
  • 枚举由 Autofac 生命周期跟踪的一次性物品

    Autofac 使用生命周期范围作为处理工作单元期间创建的所有组件的一种方式 虽然这是一个强大的功能 但很容易编写不能正确处理生命周期范围的代码 这会导致跟踪的一次性数量随着时间的推移而增长 实际上是内存泄漏 有没有办法监控生命周期范围在任
  • Maven pom.xml 中“SNAPSHOT”版本的含义[重复]

    这个问题在这里已经有答案了 在处理多个项目时 我遇到了很多版本号有问题的情况 快照后缀 例如
  • Sympy - 分数操作

    我基本上希望 Sympy 生成乳胶代码 frac x 1 3 y 但每当我要求它生成事物的 Tex 组件时 Sympy 总是返回 frac x 3 frac 1 3 如何避免分解方程 并将等于运算符分配给另一个变量 我还没有尝试将 y 部分
  • 发送短信之前显示确认对话框

    我是 Android 新手 我已经完全绑定了我的应用程序 但我希望现在对其进行更改 当有人发送短信时 我想显示一个发送短信的确认对话框 询问是否发送 我必须为此创建一个公共类 我已经编写了源代码 它工作正常 但如果用户不单击 是 或 取消
  • 共享扩展 - 自 iOS 14 以来首次尝试时应用程序未显示在共享菜单中

    升级到 Xcode 12 和 iOS 14 后 似乎开始发生一些奇怪的事情 应用程序以前在共享菜单选项中显示良好 但突然它表现得很奇怪 并且仅在第二次尝试后才显示 我的目标是获取网页网址 这是我的共享激活规则 我什至尝试过新项目 并添加了带
  • JS奇怪的行为[重复]

    这个问题在这里已经有答案了 有人可以帮助我 为什么我们在 JS 片段中有这种行为 var foo function return hi console log foo var foo1 function return hi console
  • 如何在没有android studio的情况下签署android apk

    我已经发现很多很多关于这一点的令人困惑的答案 How do I Sign release debug android app没有 Android Studio 例如 在签署 ionic cordova phonegap 应用程序时 您可以在
  • 如何在 React 中验证组件组合/“基础”组件/渲染的根组件?

    众所周知 当我们想要 扩展 一个
  • 在 R 中从一条线偏移绘制一条平行线

    我有代表沿着一些街道行驶的线串 但我实际上想代表骑自行车者的旅程 它偏离线路 即他们在路边附近行驶 我正在努力思考如何去做 我制作了一段可重现的 R 代码来进行说明 Let s say I have a route along some s
  • 如何在swift中将字符串(在Java中使用加密MessageDigest)编码为Base64字符串?

    在Java中 我使用了这个 public void encryptData String data Hello World MessageDigest md null try md MessageDigest getInstance MD5
  • 如何使用mysqli准备好的语句?

    我正在尝试准备好的语句 但下面的代码不起作用 我收到错误 致命错误 在非对象上调用成员函数execute var www prepared php 第 12 行
  • 比较 2 个 csv 文件之间的列并使用 Python 写入差异

    我试图通过比较 2 个 csv 文件之间的列来打印出差异 CSV1 SERVER FQDN IP ADDRESS serverA device1 com 10 10 10 1 serverA device2 com 10 11 11 1 s