【问题标题】:python compare dict reader elements from two csv filespython比较两个csv文件中的dict阅读器元素
【发布时间】:2015-02-06 19:50:14
【问题描述】:

我有两个要比较的 CSV 文件。我已经使用 dict 阅读器阅读了它们。所以现在我有来自两个 CSV 文件的字典(每行一个)。我想比较它们,比如当两个元素(带有标题 h1 和 h2 的元素)相同时,比较这些字典并打印出与第二个字典的差异。以下是示例 csv 文件。

csv1:

h1,h2,h3
aaa,g0,74
bjg,73,kg9

CSV_new:

h1,h2,h3,h4
aaa,g0,7,
bjg,73,kg9,ahf

我希望输出是这样的,虽然不完全如下所示,但我希望它能够打印出每个字典中关于 CSV_new 的修改、添加和删除:

{h1:'aaa', h2:'g0' {h3:'74', h4:''}}
{h1:'bjg', h2:'73' {h4:''}

我的代码还不够完善。

import csv
f1 = "csv1.csv"
reader1 = csv.DictReader(open (f1), delimiter = ",")
for row1 in reader1:
    row1['h1']
#['%s:%s' % (f, row[f]) for f in reader.fieldnames]
f2 = "CSV_new.csv"
reader2 = csv.DictReader(open (f2), delimiter = ",")
for row2 in reader2:
    row2['h1']
if row1['h1'] == row2['h1']:
    print row1, row2

【问题讨论】:

  • 我对你的预期输出感到非常困惑。
  • 我很抱歉我的解释很糟糕。我想要的只是两个文件之间的差异,以及标题名称。 @亚当史密斯
  • 基本上你是在问如何比较字典——它们是如何创建的无关紧要——所以我建议你 search 询问有关该主题的问题和答案。
  • @martineau 这些并没有真正回答我的问题,或者至少我不确定这些是否是我正在寻找的。因为我有来自一个 CSV 文件的多个字典,并且它们没有分配给它们的任何名称/变量。
  • 从每个csv.DictReader 对象读取的每一行都是一个带有名称(row1row2)的字典变量。如果将它们存储在列表中,它们的变量名称将类似于list_name[i],其中i 是一个整数变量(或整数常量)。

标签: python csv dictionary compare


【解决方案1】:

如果你只是想找出差异,你可以使用 difflib 例如: import difflib fo1 = open(csv) fo2 = open(CSV_new) diff =difflib.ndiff(fo1.readlines(),fo2.readlines()) 然后你可以写出你想要的差异

【讨论】:

    【解决方案2】:

    这可能是您要查找的内容,但如上所述,您的描述有些含糊。

    with open(A) as fd1, open(B) as fd2:
        a, b = csv.reader(fd1), csv.reader(fd2)
        ha, hb = next(a), next(b)
        if not set(ha).issubset(set(hb)):
            sys.exit(1)
    
        lookup = {label : (key, hb.index(label)) for key, label in enumerate(ha)}
        for rowa, rowb in zip(a, b):
            for key in lookup:
                index_a, index_b = lookup[key]
                if rowa[index_a] != rowb[index_b]:
                     print(rowb)
                     break
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 2014-08-24
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多