Csv 使用python 3比较2个文件

Csv 使用python 3比较2个文件,csv,python-3.x,tabs,Csv,Python 3.x,Tabs,我试图使用python比较两个分隔文件,通常是csv/pipe文件。我不是逐行比较,而是寻找单元到单元的比较(元素到元素)。 我的结果应该是 应创建不匹配的文件 在控制台中,它应该显示列名、行号、源行元素值和目标行元素值。 有谁能帮我一下吗 示例代码: import sys, csv ,operator data = csv.reader(open('D:\ANACONDA\sam.csv'),delimiter=',') sortedlist = sorted(data, key=operat

我试图使用python比较两个分隔文件,通常是csv/pipe文件。我不是逐行比较,而是寻找单元到单元的比较(元素到元素)。 我的结果应该是

  • 应创建不匹配的文件

  • 在控制台中,它应该显示列名、行号、源行元素值和目标行元素值。 有谁能帮我一下吗

  • 示例代码:

    import sys, csv ,operator
    data = csv.reader(open('D:\ANACONDA\sam.csv'),delimiter=',')
    sortedlist = sorted(data, key=operator.itemgetter(0))    # 0 specifies according to first column we want to sort
    print (sortedlist);
    now write the sorte result into new CSV file
    with open("NewFile.csv", "wb") as f:
     fileWriter = csv.writer(f, delimiter=',')
     for row in sortedlist:
               fileWriter.writerow(row)
    

    源文件1:

    NAME,AGE,CITY  
    a,34,abc
    
    目标文件1:

    NAME,AGE,CITY  
    a,34,xys
    
    输出应如下所示: 列CITY不匹配,第25行,源值为:abc,目标值为:xys

    您可以执行以下操作:

    rowElementCompare(sourceRow, targetRow)
    {
        row_length = min(len(sourceRow), len(targetRow))
        for i in range(row_length):
            if sourceRow[i] != targetRow[i]:
                return i
        return None
    }
    
    import csv, itertools
    
    column_names = ['name','age','city']
    source_data = csv.reader(open('source.csv', delimiter=',')
    target_data = csv.reader(open('target.csv', delimiter=',')
    counter = 1
    
    for source_row,target_row in itertools.izip(source_data,target_data):
        comparison_result = None
        comparison_result = rowElementCompare(source_row, target_row)
        if comparison_result != None: #comparison_result is the column index at which the mismatch occured
            print "Mismatch in column %s on row number %d , source value %s, target value %s" % (column_names[comparison_result], counter, source_row[comparison_result], target_row[comparison_result])
        counter += 1
    
    假设源文件和目标文件都具有相同顺序的列,或者您所做的任何排序都会生成仍保留列顺序的输出

    此外,比较假定元素值是字符串,而不是任何其他数据类型(否则,您应该自己进行数据类型转换)