2016-11-30 1 views
0

2 개의 CSV 파일이 있습니다. 목록 A의 각 요소를 목록 B의 모든 요소와 일치 시키길 원합니다. 목록 A는 학습 집합으로 작동하고 목록 B는 편집 거리를 사용하여 일치 한 후에 수정되는 오류가 있습니다.csv 파일의 두 열이 단일 열로 읽혀집니다. python 2.7

문제는 두 번째 열에는 첫 번째 열에 고유 번호가 있고 두 번째 열에는 수정할 문자열이 있습니다.

메신저로 출력을 얻기 :

import csv 
from nltk.metrics import distance 


with open("all_correct_promo.csv","rb") as file1: 
    reader1 = csv.reader(file1) 
    correctPromoList = [''.join(i) for i in reader1] 
    # print correctPromoList 
with open("all_extracted_promo3.csv","rb") as file2: 
    reader2 = csv.reader(file2) 
    extractedPromoList = [''.join(i) for i in reader2] 
    #print extractedPromoList 

incorrectPromo = {} 
count = 0 
for extracted in extractedPromoList: 
    #print 'Computing %dth promo code...' % count 
    incorrectPromo[extracted] = find_min_edit(extracted,correctPromoList) # get comma separated str of real promo codes nearest to extracted 
    count+=1 
#print incorrectPromo 


for key, value in incorrectPromo.iteritems(): 
    print key ,':', value 

는 현재 고유 번호가 읽어지고

628227 : teitARMTEteke : iQIARMTEMAC 
628226 : iQIARMTEMAC 9 : iQIARMTEMAC 
628229 : iQIAConfigCH : iQIAConfigCH 
627701 : iQIAConfigCH : iQIAConfigCH 

CODE :

628227teitARMTEteke : iQIARMTEMAC 
628226iQIARMTEMAC 9 : iQIARMTEMAC 
628229iQIAConfigCH : iQIAConfigCH 
627701iQIAConfigCH : iQIAConfigCH 

하지만 난 내 출력이 원하는 문자열이 수정되는 방식에 영향을 줄 문자열로 난 숫자가 문자열하지만 문자열이

샘플 all_correct_promo.csv

에서 all_extracted_promo3.csv

628229 iQIABundUPGR 
628229 iQIAPortUPGR 
628229 iQIAConfigCH 
628229 iQIARMTEMAC 9 

샘플에서리스트 A의 문자열과 일치지고 길을 초래하지 않고 표시 할

+0

목록 A는 무엇입니까? –

+0

all_correct_promo.csv - 목록 A가됩니다 – safwan

+0

저는 약간 혼란 스럽습니다. 숫자가있는 문자열은'all_correct_promo.csv'에서 오는 것입니다. 숫자없이 문자열에 대한 거리 계산을 원하십니까? –

답변

1

데이터를 가져 오는 이상한 방법을 떠나서 - 적어도 사용하는 경우 - 나는 정확히 csv.reader에 대해 대답 할 것입니다.

csv.reader에 대해 열을 구별하려면 .csv에 따라 dialect을 설정해야합니다. its docs으로 말하면, 그것은 모든 개인적인 dialect formatting parameters을 키워드 인수로 허용합니다. 여기에서, 당신은 delimeter에서 아마 관심이 :

csv.reader(<file>,delimeter=<whatever>) 

all_extracted_promo3.csv이 구분에 대한 두 개의 공백이, 발췌으로 판단하고, all_correct_promo.csv은 하나의 공간을 사용합니다. csv.Reader only supports single-character delimiters though : - 예를

>>> [i for i in csv.reader(open("all_extracted_promo3.csv","rb"),delimiter=' ')] 
[['628229', '', 'iQIABundUPGR'], 
['628229', '', 'iQIAPortUPGR'], 
['628229', '', 'iQIAConfigCH'], 
['628229', '', 'iQIARMTEMAC', '9']] 

그래서 당신은 파일을 생성 소프트웨어를 변경을해야 하나 (2 요소를 무시함으로써) 그 주위에 얻을 것이다 구분 기호로 표준 쉼표를 사용하거나 파일을 구문 분석하기 위해 다른 기능을 사용하십시오.

관련 문제