尝试比较两个 csv 文件并将差异写入输出

2024-01-09

我正在开发一个脚本,它获取 2 个 csv 文件之间的差异,并生成一个新的 csv 文件作为具有差异的输出,但前提是两个输入文件之间的相同 2 行(指行号)包含不同的数据,例如文件 1 中的第 3 行有“mike”、“篮球运动员”,文件 2 中的第 3 行有“mike”、“棒球运动员”。输出 csv 将抓取这些打印并将它们写入 csv。它有效,但存在一些问题(我知道这个问题之前也被问过几次,但其他人对我的做法不同,而且由于我对编程相当陌生,我不太理解他们的代码)。

新的 csv 文件中的输出在每个单元格中都有输出的每个字母(见下图),我相信它与分隔符/quotechar/引用行 37 有关。我希望它们在自己的单元格中,没有任何句号,多个空格、逗号或“|”。

另一个问题是运行时间较长。我正在处理多达 50,000 行的数据集,运行可能需要一个多小时。为什么会这样?什么建议有助于加快速度?也许在 for 循环之外放一些东西?我之前确实尝试过 difflib 方法,但我只能打印整个“input_file1”,但无法将该文件与另一个文件进行比较。

# aim of script is to compare csv files and output difference as a new csv

# import necessary libraries
import csv

# File1 = open(raw_input("path:"),"r") #filename, mode
# File2 = open(raw_input("path:"),"r") #filename, mode

# selects the 2 input files to be compared
input_file1 = "G:/savestuffhereqwerty/electorate_meshblocks/teststuff/Book1.csv"
input_file2 = "G:/savestuffhereqwerty/electorate_meshblocks/teststuff/Book2.csv"
# creates the blank output csv file
output_path = "G:/savestuffhereqwerty/electorate_meshblocks/outputs/output2.csv"
a = open(input_file1, "r")
output_file = open(output_path,"w")
output_file.close()
count = 0

with open(input_file1) as fp1:


    for row_number1, row_value1 in enumerate(fp1):
        if row_number1 == count:
            print "got to 1st point"
            value1 = row_value1

            with open(input_file2) as fp2:
                for row_number2, row_value2 in enumerate(fp2):
                    if row_number2 == count:
                        print "got to 2nd point"
                        value2 = row_value2

                        if value1 == value2:
                            print value1, value2
                        else:
                            print value1, value2
                            with open(output_path, 'wb') as f:
                                writer = csv.writer(f, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
                                # testing to see if the code writes text to the csv
                                writer.writerow(["test1"])
                                writer.writerow(["test2", "test3", "test4"])
                                writer.writerows([value1, value2])
                                print "code reached writing stage"
        count += 1
        print count
print "done"
# replace(",",".")

由于您想逐行比较两个文件,因此应该not循环遍历第二个文件every第一个文件中的行。您可以简单地zip https://docs.python.org/2/library/functions.html#zip两个 csv 阅读器并过滤行:

input_file1 = "foo"
input_file2 = "bar"
output_path = "baz"

with open(input_file1) as fin1:
  with open(input_file2) as fin2:
    read1 = csv.reader(fin1)
    read2 = csv.reader(fin2)
    diff_rows = (row1 for row1, row2 in zip(read1, read2) if row1 != row2)
    with open(output_path, 'w') as fout:
      writer = csv.writer(fout)
      writer.writerows(diff_rows)

此解决方案假设两个文件具有相同的行数。

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

尝试比较两个 csv 文件并将差异写入输出 的相关文章

随机推荐

  • 如何在 python 中将列表列表转换为集合以便我可以与其他集合进行比较?

    我有一个清单users with invites ids list 由我将值附加到列表的循环形成 在 python 中如下所示 ObjectId 55119e14bf2e4e010d8b48f2 ObjectId 54624128bf2e4
  • 布局:如何在垂直布局中使一个小部件是其余小部件的 3 倍

    我有 3 个垂直布局的表格 A B 和 C 这 3 个表格的大小策略 水平和垂直 设置为扩展 如何使表 A 的大小成为 B 和 C 的 3 倍 并始终保持该比例 我通过 QT Designer 来完成此操作 Update 为了测试布局拉伸方
  • Telegram 机器人:如何通过 ID(而不是用户名)提及用户

    我正在创建一个电报机器人并使用sendMessage发送消息的方法 很容易提及用户使用 username 但是当用户没有用户名时如何提及用户呢 如果使用电报应用程序 网络 我们可以通过以下方式提及用户 integer id name 而 t
  • C# 中四舍五入到小数点后两位

    如何将两位小数相乘并将结果四舍五入到小数点后两位 例如 如果方程为 41 75 x 0 1 则结果将为 4 175 如果我在 C 中使用小数执行此操作 它将自动四舍五入到 4 18 我想四舍五入到 4 17 我尝试使用 Math Floor
  • 打开像 Whatsapp 这样的对话框时显示动画?

    我想打开用户信息的对话框并显示动画 就像 Whatsapp 所做的那样 任何想法 先感谢您 看看这个开源库FabDialogMorph https github com hujiaweibujidao FabDialogMorph Here
  • 将 Json 映射到 Angular 对象

    我有以下 JSON 数据 columns table black list name id datatype uuid table black list name emailid datatype varchar table black l
  • SQL 帮助:使用嵌套 SELECT 计算单个查询中的行数

    我正在寻找一种更好的方法来执行以下查询 我有一个看起来像这样的表 game id home team id away team id 1 100 200 2 200 300 3 200 400 4 300 100 5 100 400 我想编
  • 在 AWS ECS 上的 Docker 映像中运行 CloudWatch Agent 失败

    对于这个问题 我对 Docker 和 AWS 还比较陌生 目标是创建一个使用基本 Laravel 应用程序运行 Apache 和 PHP 的单个 AWS ECS 实例 我想运行 CloudWatch 代理将所有日志发送到 CloudWatc
  • 在 Ajax 查询中使用预输入时出现 ember-select-2 问题

    我在用着余烬 选择 2 https istefo github io ember select 2 examples作为 ember 应用程序中的预输入 问题是我可以从服务器获取数据 但数据没有显示在下拉列表中 任何帮助将不胜感激 提前致谢
  • R 中 Stata 的 xtlogit (fe, re) 等效项?

    Stata 允许通过以下方式指定逻辑回归的固定效应和随机效应xtlogit http www stata com manuals13 xtxtlogit pdf fe and xtlogit http www stata com manua
  • 如何在 Atom 中替换换行符?

    在 Atom 中 如果我在搜索和替换工具上激活正则表达式模式 它可以找到换行符 n 但是当我尝试替换它们时 它们仍然存在 有没有办法替换 Atom 中的换行符字符串 看起来 Atom 匹配换行符为 r n但仅替换时表现不一致 n什么也没有
  • Visual Studio 生成的 Dockerfile 不适用于手动 docker 构建

    我想对现有的 NET core 5 应用程序进行 dockerize 并使用容器工具生成 Dockerfile 当我使用 Visual Studio 2022 进行调试时 它可以工作 但是当我使用命令手动运行它时docker build t
  • 如何用Python同时记录鼠标和键盘的移动?

    我想创建一个函数来记录鼠标和键盘事件 直到按下特定的键 然后一起重播它们 我认为这可以通过keyboard and mouse模块 在之前的一个问题中 我问过如何记录按下按键之前的鼠标移动 https stackoverflow com q
  • 带有透明居中箭头的边框

    我正在尝试用 a 来设计 div 的样式具有向下箭头的底部边框 div 中将包含图像 并且不应有上边框 右边框或左边框 向下箭头的填充应该与 div 相同或透明 我已经能够使用下面的代码让它大部分工作 hero position relat
  • 无法在节点和运行时之间转换参数“tx”:解码字段调用时出错

    当我想使用基于基板的链中内置的方法以及自定义类型时 我收到以下错误 2020 04 13 21 03 01 RPC CORE submitAndWatchExtrinsic extrinsic Extrinsic ExtrinsicStat
  • 图 - 具有顶点权重的最短路径

    这是一个消费税 在某些图问题中 顶点可以有权重而不是 或者除了边的权重之外 设 Cv 为顶点的成本 v 和 C x y 边 x y 的成本 这个问题大家关心 寻找图 G 中顶点 a 和 b 之间最便宜的路径 路径的成本是边和顶点的成本之和
  • 使用 ImageDataGenerator 时的 Keras 分割训练测试集

    我有一个目录 其中包含图像的子文件夹 根据标签 我想在 Keras 中使用 ImageDataGenerator 时将这些数据拆分为训练集和测试集 虽然 keras 中的 model fit 有用于指定分割的参数validation spl
  • 一级缓存和二级缓存有什么区别?

    我知道l1和l2缓存是多级缓存中的级别 我想知道每一级缓存放置在哪里 以及允许的最大缓存级别是多少 这两者都取决于CPU 有些CPU根本没有高速缓存 有些CPU在芯片上有L1高速缓存 而L2高速缓存在同一芯片上的单独芯片上 甚至在单独的芯片
  • 如何将图像文件保存在 Postgres 数据库上?

    出于学习目的 我正在使用 Python Flask 创建一个网站 我想从数据库中恢复图像并将其显示在屏幕上 但一步一步来 我首先不知道如何将图像保存在我的数据库中 我的搜索只显示我必须使用bytea输入我的数据库 然后我得到我的图像并以某种
  • 尝试比较两个 csv 文件并将差异写入输出

    我正在开发一个脚本 它获取 2 个 csv 文件之间的差异 并生成一个新的 csv 文件作为具有差异的输出 但前提是两个输入文件之间的相同 2 行 指行号 包含不同的数据 例如文件 1 中的第 3 行有 mike 篮球运动员 文件 2 中的