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

时间:2017-01-31 21:09:47

标签: python csv compare difference

我正在开发一个脚本,该脚本获取2个csv文件之间的差异,并且只有当两个输入文件之间相同的2行(指行号)包含不同时,才会生成一个新的csv文件作为输出与差异BUT数据,例如第3排有"迈克","篮球运动员"在文件1和文件2中的第3行中有"迈克","棒球运动员"。输出csv将抓取这些打印它们并将它们写入csv。它有效但有一些问题(我知道这个问题之前也曾被问过几次,但其他人对我的看法不同,因为我对编程很新,我不太了解他们的代码)

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

另一个问题是运行需要很长时间。我使用的数据集最多可达50,000行,运行时间可能超过一小时。为什么这个和什么建议对加快它有用?可能会在for循环之外放些东西吗?我之前尝试过difflib方法但是我只能打印整个" input_file1"但不能将该文件与另一个文件进行比较。

=IF(IFERROR(MATCH("*" & A1 & "*",B1:D1,0),FALSE), A1,"Not Found")

SCREENSHOT OF PRINTED OUTPUT SCREENSHOT OF OUTPUT CSV

1 个答案:

答案 0 :(得分:0)

由于您希望逐行比较这两个文件,因此您应该遍历第一个文件中每个行的第二个文件。您只需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)

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