使用python 3比较2个文件

时间:2014-09-01 10:20:20

标签: csv python-3.x tabs

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

  1. 应创建不匹配文件

  2. 在控制台中,它应显示列名,行号,源行元素值和目标行元素值。 任何人都可以帮我这个吗?

  3. 示例代码:

    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

1 个答案:

答案 0 :(得分:1)

你可以这样做:

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

假设源文件和目标文件都具有相同顺序的列,或者您执行的任何排序都会产生仍保留列顺序的输出。

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