2017-07-31 32 views
0

ヘッダーの1つがsession_idと呼ばれるTSV(タブ区切りファイル)があります。 myMapというマップもあり、キーはsession_idで、値はセッション長です。今私が望むのは、tsvファイルを変更して、 "Length"というヘッダーを最後に追加し、そこに長さの値を追加することです。これは、各行に対して、session_lengthを別のタブ区切り値として各行の末尾に追加する必要があることを意味します。TSVファイルの最後に列を追加する

User_id Session_id Age Date 
23  'adasd5' 23 23/02/2017 

そして、私も持っている: たとえば、私のTSVファイルの最初の行は次のようになります場合は、最初に

myMap['adasd5']=12 

ので、ファイルは変更されなくてはいけない:

User_id Session_id Age Date  Length 
23  'adasd5' 23 23/02/2017 12 

これは私がやったものですが、うまくいきません:

with open('file.tsv', 'r+b') as infile: 
     header=infile.next() 
     h=header+'\t'+"return"+'\n' 
     infile.write(h) 
     for line in infile: 
      line2 = line.strip().split('\t') 
      if line2[1] in myMap: 
       d=line+'\t'+str(myMap[line2[1]])+'\n' 
      infile.write(d) 
    infile.close() 
+0

パンダを使用することをいとわない:ここで

は、答えは? –

+0

また、どのようにして何をやっていないのですか? –

+0

@RyanStout Awはい。もしあなたがそれを解決するなら、私はパンダを使うこともできます。 – HimanAB

答えて

1

私は友人(@Babak)に質問して答えを見つけました。

df=pd.read_csv('file.tsv', sep='\t',names=["User_id","Session_id","Age","Date"]) 

df['Length']=df.session_id.apply(lambda x:myMap[x]) 
0

パンダはこれを簡単にしますが、良いのは、Pythonがうまくいくことです。 tsv入力ファイルのSession_id値を一重引用符で囲むので、output.appendコード行に.replace()メソッドがあり、辞書検索のためにそれらを取り除くことができます。

それ以外の場合は、区切り文字としてタブを指定し、ヘッダー行をスキップして残りのファイルをリストのリストに取り込みます。

次に、myMapルックアップの結果を最後に追加してこのリストを反復処理します。新しいヘッダーを出力し、出力データをファイルに書き込みます。

import csv 
with open('file.tsv', newline='') as f: 
    f.readline() 
    reader = csv.reader(f, delimiter='\t') 
    data = list(reader) 

output = [] 
myMap = { 
    'adasd5': 12, 
} 
for line in data: 
    user_id, session_id, age, date = line 
    output.append([user_id, session_id, age, date, myMap[session_id.replace("'", '')]]) 

with open('output.tsv', 'w', newline='') as f: 
    headers = ['User_id', 'Session_id', 'Age', 'Date', 'Length'] 
    writer = csv.writer(f, delimiter='\t') 
    writer.writerow(headers) 
    writer.writerows(output) 
+0

パンダでも答えを教えてください。 – HimanAB

+0

あなたはそれを最初に打ち、あなたが思いついたことを私たちに知らせてみませんか?また、最初の例がうまくいけば、upvoteを正しい解決策として受け入れてみませんか? – Chris

+0

私は今それをテストしています。それがうまくいくと答えを受け入れます。 – HimanAB

関連する問題