比较2个具有相同标题的csv文件,并通过一些计算输出第三个csv

时间:2018-12-20 04:36:42

标签: python csv compare

我想比较2个csv文件并将结果存储在一个新的csv文件中。

我有2个具有相同标头的csv(old.csv和new.csv)。

如何比较每个值并根据这些值进行计算?

with open('new.csv') as new_csv, open('old.csv') as old_csv:
    reader_old = csv.DictReader(old_csv)
    reader_new = csv.DictReader(new_csv)
    for row_o in reader_old:
        for row_n in reader_new:

            if row_n['Account'] == row_o['Account']:
                amt_diff = float(row_n['Number']) - float(row_o['Number'])
                print(amt_diff)

1 个答案:

答案 0 :(得分:0)

Python具有a module called csv,可让您完成各种csv文件的读取和写入操作,而不必执行繁琐的任务,即手动编写行以获取字符串,以逗号将其分解等。例如,您可以使用csv.DictReader()将行读入字典中,其中的键与列名相同:

import csv
with open('new.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        ranking = row['Ranking']
        percentage = row['Percentage']
        print("The percentage in this row is", percentage)

提取所需内容并进行计算后,可以使用csv.DictWriter将数据写入新的第三个csv文件。在网络上搜索python csv module可以为您提供许多示例。

编辑:我阅读了您的评论,并看到了您更新的代码。据我所知,让我们看一下嵌套循环的作用:

  1. 采用旧CSV数据的第一行
  2. 获取新CSV数据的第一行
  3. 比较其“帐户”的值。如果它们相同,则打印它们的差异(如果两个数字相同,则应为零,对吧?)
  4. 对旧版本的#1 行和新版本的#2行进行相同操作。
  5. 对旧版本的#1 行和新版本的#3行进行相同操作。
  6. 继续,直到比较旧的#1行和新的最后一行。
  7. 使用旧版本的#2 和新版本的#1,然后旧版本的#2行和新版本的#2,新版本的#2,重复上述所有操作。旧版本和新版本的第3行,等等。

这就是您想要的吗?还是只是尝试逐行比较它们并写出差异?

编辑#2:

我不知道这是否会有所作为,但请尝试以下方法:

reader_old = csv.DictReader(open("old.csv"))
reader_new = csv.DictReader(open("new.csv"))
for row_o in reader_old:
    for row_n in reader_new:
        amt_diff = float(row_n['Number']) - float(row_o['Number'])
        print(amt_diff)

如果您要将此内容写入新文件而不是仅打印结果,请参见csv.DictWriter()