【问题标题】:Matching values in python between two csv files两个csv文件之间的python匹配值
【发布时间】:2015-10-09 10:49:17
【问题描述】:

我有两个 CSV 文件需要从中提取正确的匹配项。我想比较第一个文件中的每一行,并说明它是否在文件二中的任何行都有匹配值。如果找到匹配项,则听起来会转到 fileOne 中的下一行并重复。

下面是我到目前为止的代码,但它似乎只是直接在每个文件行之间进行比较。因此,文件一中的第一行仅与文件二中的第一行进行比较,而不是遍历文件二中的所有行,直到找到匹配项或未找到匹配项。

我怀疑这与我设置 for 循环的方式有关,但我不确定。

import csv

fileOne = csv.reader(open("fileone.csv", "r"))
fileTwo = csv.reader(open("filetwo.csv", "r"))

for row1 in fileOne:
    for row2 in fileTwo:
        row1String = row1[1].upper() + row1[0].upper()
        row2String = row2[1].upper() + row2[0].upper()

        if row1String == row2String:
            print "Matched %s, %s, %s" % (row1[1], row2[1], row1[0])
            break
        else:
            print "No Match, %s" % (row1[0])
            break

【问题讨论】:

  • csv.reader 是一个迭代器 - 试试例如fileOne = list(...).
  • 谢谢,效果很好。

标签: python csv comparison


【解决方案1】:

将您的最后一个 else 块转移为您的 for loopelse 块。所以你的for loop 看起来像:-

file2items = [row2 for row2 in fileTwo]
for row1 in fileOne:
    for row2 in file2items:
        row1String = row1[1].upper() + row1[0].upper()
        row2String = row2[1].upper() + row2[0].upper()

        if row1String == row2String:
            print "Matched %s, %s, %s" % (row1[1], row2[1], row1[0])
            break
    else:
        print "No Match, %s" % (row1[0])
        break

只有在遍历整个第二个文件之后,您才会得出“未找到匹配项”的结论。如果 for 循环在其迭代期间从未中断(即未找到匹配项),则此 else 块将触发。

【讨论】:

  • 这仍然留下了fileOnefileTwo是迭代器的问题,所以它们在第一次迭代时会被消耗掉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多