Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python在两个csv文件之间匹配值_Python_Csv_Comparison - Fatal编程技术网

用python在两个csv文件之间匹配值

用python在两个csv文件之间匹配值,python,csv,comparison,Python,Csv,Comparison,我有两个CSV文件,需要从中提取正确的匹配项。我想比较第一个文件中的每一行,并说明它是否在文件2中的任何一行具有匹配值。如果找到匹配项,则转到fileOne中的下一行并重复 下面是我到目前为止的代码,但它似乎只是直接在每个文件行之间进行比较。因此,只将文件1中的第一行与文件2中的第一行进行比较,而不是在文件2中的所有行之间循环,直到找到匹配或没有匹配为止 我怀疑这与我如何设置for循环有关,但我不确定 import csv fileOne = csv.reader(open("fileone.

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

下面是我到目前为止的代码,但它似乎只是直接在每个文件行之间进行比较。因此,只将文件1中的第一行与文件2中的第一行进行比较,而不是在文件2中的所有行之间循环,直到找到匹配或没有匹配为止

我怀疑这与我如何设置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

将上一个
else
块作为
else
块移动到
for循环
。因此,循环的
如下所示:-

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
块。

csv.reader
是迭代器-请尝试使用,例如
fileOne=list(…)
。谢谢,这非常有效。这仍然存在
fileOne
fileTwo
是迭代器的问题,因此,将在第一次迭代时使用。