2014-09-01 3 views
-1

파이썬을 사용하여 일반적으로 CSV/파이프 파일 2 개를 구분하려고합니다. 라인별로 비교하는 대신 셀 대 셀 비교 (요소 대 요소)를 찾고 있습니다. 내 결과파이썬 3을 사용하여 2 개의 파일 비교

  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) 

원을 File1 :

NAME,AGE,CITY 
a,34,abc 

대상을 File1 :

NAME,AGE,CITY 
a,34,xys 

출력이 같아야합니다 : ABC와 목표 값은 다음과 같습니다 : 열시에 불일치, 행 번호 (25)는, 소스 값은 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 

가정이 있다는 것입니다을 모두 원본 및 대상 파일에는 같은 순서로 열이 있거나 열 정렬이 유지되는 위치에서 출력을 생성합니다.

또한 비교에서는 요소 값이 문자열이며 다른 데이터 형식이 아니라고 가정합니다. 그렇지 않으면 직접 데이터 형식을 변환해야합니다.