我试图使用python比较2个分隔文件,通常是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
答案 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
假设源文件和目标文件都具有相同顺序的列,或者您执行的任何排序都会产生仍保留列顺序的输出。
此外,比较假设元素值是字符串而不是任何其他数据类型(否则您应该自己进行数据类型的转换。