2016-11-30 2 views
0

私は2つのCSVファイルを持っています。リストAの各要素がリストBのすべての要素と一致するようにします。リストAはトレーニングセットとして機能し、リストBは編集距離を使用して一致した後に修正されるエラーを持ちます。csvファイルの2つの列が1つの列として読み取られます。 python 2.7

問題は、最初の列には2つの列があり、一意の番号があり、2番目の列には固定する文字列があることです。

イムとして出力を得る:

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.内の文字列にマッチしたばかりされている方法に影響を与えずに表示させたいです

iQ BundleUPGR 
IQ MANAGED 
IQ04 BRP 
IQ1MOBILSUP 
IQ2MOBILSUP 
iQBundIeUPGR 
iQBundle 1 
iQBundle 2 
+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は、区切り文字のための2つのスペースがあり、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番目の要素を無視して)それを回避するためのいずれか必要があります - 例えば区切り記号として標準カンマを使用するか、ファイルを解析するために他の機能を使用します。

関連する問題