2014-09-01 141 views
-1

我想比較兩個分隔的文件,通常是使用python的csv/pipe文件。我正在尋找細胞對細胞的比較(元素到元素),而不是逐行比較。 我的結果應該是使用python比較兩個文件3

  1. 不匹配文件應該被創建

  2. 在它應該顯示的列名,行號,源行元素值和目標行元素值控制檯。 任何人都可以幫我解決這個問題嗎?

樣品的編號:

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 

輸出應該是這樣的: 不匹配的列城,行號25,源值爲:ABC和目標值:XYS

回答

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 

的假設是,無論是源文件和目標文件具有相同順序的列,或者無論您如何進行排序都會在列順序仍保留的情況下生成輸出。

此外,比較還假定元素值是字符串,而不是任何其他數據類型(否則您應該自己對數據類型進行轉換)