Python 读取两个csv文件并比较每一行。如果两行匹配,则打印两行,如果不相似,则打印无效

Python 读取两个csv文件并比较每一行。如果两行匹配,则打印两行,如果不相似,则打印无效,python,Python,这个程序没有打印出第1行,第2行。它只是打印文件1的第一行,在同一行上多次无效。您需要比较相应的行,而不是每行与每行,这就是您的代码现在所做的 来自未来导入打印功能 导入csv 进口itertools 导入系统 根据我们使用的是Python2还是Python3,选择正确的函数。 如果sys.version_info.major==2: zip_longest=itertools.izip_longest 其他: zip_longest=itertools.zip_longest f1=openf

这个程序没有打印出第1行,第2行。它只是打印文件1的第一行,在同一行上多次无效。

您需要比较相应的行,而不是每行与每行,这就是您的代码现在所做的

来自未来导入打印功能 导入csv 进口itertools 导入系统 根据我们使用的是Python2还是Python3,选择正确的函数。 如果sys.version_info.major==2: zip_longest=itertools.izip_longest 其他: zip_longest=itertools.zip_longest f1=openfile1.csv f2=openfile2.csv csv_f1=csv.readerf1 csv_f2=csv.readerf2 对于zip_longestcsv_f1、csv_f2中的第1行、第2行: 如果第1行==第2行: 打印行1[0],行2[0] 其他: printrow1[0],无效 读取两个CSV文件并创建字典,其中键为行号,值为行 迭代器对file1(即root1)进行迭代器,并与file2(即具有相同密钥的root2)进行比较。 当文件1的条目数大于文件2时,处理异常。 代码:

输出:

import csv
with open("/home/infogrid/Desktop/file1.csv", "rb") as fp1:
    root = csv.reader(fp1,)
    root1 = {}
    for i in root:
        root1[root.line_num] = i
    
with open("/home/infogrid/Desktop/file2.csv", "rb") as fp1:
    root = csv.reader(fp1,)
    root2 = {}
    for i in root:
        root2[root.line_num] = i

for i in root1:
    try:
        if root1[i]==root2[i]:
            print root1[i], root1[i]
        else:
            print root1[i], "Invalid"
    except:
        print root1[i], "Invalid"

如果file1包含N行,file2包含M行,则代码将进行N*M比较file1中的行1将与file2中的每一行进行比较,然后file1中的行2将与file2中的每一行进行比较,以此类推。。这是您的意图吗?是的,这是正确的,如果它们相似,请打印第1行和第2行。否则,始终打印第1行,但如果与第1行不匹配,则打印无效。谢谢你的时间,我们确实取得了一些进展。但是,现在它的打印行1对所有行无效。感谢againIt为我创建的玩具CSV文件工作。将每个文件中的两行添加到问题中。f1有300行,f2有120行。练习要求我打印第1行和第2行,如果它们匹配,或者打印第1行,如果它们不匹配,则打印无效。我想我不明白。是否需要检查F2中的任何行是否与F1中的任何行匹配?你可以把这两个文件都贴在上面。没关系,我让它们工作了。谢谢你的帮助,我真的很感激。
import csv
with open("/home/infogrid/Desktop/file1.csv", "rb") as fp1:
    root = csv.reader(fp1,)
    root1 = {}
    for i in root:
        root1[root.line_num] = i
    
with open("/home/infogrid/Desktop/file2.csv", "rb") as fp1:
    root = csv.reader(fp1,)
    root2 = {}
    for i in root:
        root2[root.line_num] = i

for i in root1:
    try:
        if root1[i]==root2[i]:
            print root1[i], root1[i]
        else:
            print root1[i], "Invalid"
    except:
        print root1[i], "Invalid"
['test1', 'test3', 'test4'] ['test1', 'test3', 'test4']
['test1', 'test5', 'test4'] Invalid
['test1', 'test3', 'test4'] ['test1', 'test3', 'test4']
['test1', 'test3', 'test4'] Invalid