2017-01-25 4 views
0

IはFILE1を、位置10に位置1からchromosome1ような領域情報を有しているように見えた: chromosome,position,value 1,1,value1 1,2,value2 1,6,value3 1,13,value4 すべてのキーの値を追加して新しい辞書を印刷するにはどうしたらいいですか?

:FILE2は、いくつかの値を持つchromosome1上の位置6のようなすべての位置の値は、のように見えた chromosome,start_position,end_position 1,1,10 1,11,20

私はFILE2で がFILE1内の任意の領域に属する位置、のようなものかどうかに基づいて、FILE1 FILE2への値を追加します: chromosome,start_position,end_position,total_value 1,1,10,value1+value2+value3 1,11,20,value4

両方のファイルが10m以上することができ私はこれをfile2のすべての行を調べるか(file1の任意の領域にあるかどうかを調べる)、file1のすべての行を辞書にします(file2の値を見つけますか?それから加えて?)?

そして、どのようにしてfile1のすべての行の '合計値'を得ることができますか? ありがとうございました!

+0

ようこそスタックオーバーフロー!最初に[ツアー(http://stackoverflow.com/tour)に参加して[良い質問をする方法](http://stackoverflow.com/help/how-to-ask)を学んで[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例を参照してください。そうすれば、私たちがあなたを助けやすくなります。 –

+0

この質問は、あなたが 'file1'と' file2'をどのように組み合わせる必要があるかを明確にしていません –

+0

私は辞書のアプローチが好きです。それはいくつかのギグを消費するでしょうが、あなたのマシンがまともでない場合、それはそれほど大きな問題ではありません。キーをタプルに分割するのではなく、 '' 1,1,10 ''のような文字列を保持できるなら、メモリを節約できます。 – tdelaney

答えて

0

私は、あなたが必ずしも最も効率的なコードを探しているとは思っていませんが、仕事を終わらせるものはありますか?

ファイル2の値を辞書に読み込み、キーは(chromosome, start)のペア(開始点と終了点は常にファイル2と同じであると仮定)を使用します。

import numpy as np 

for line in file1: 
    chromosome, start, end = line.split(',') 
    total_value = np.sum([file2_dict.get([(chromosome,str(i))], 0) for i in 
          range(int(start), int(end)+1)]) 
    #do something with the total value, maybe write to another file. 
    #Could do: 
    new_line = ','.join([chromosome, start, end, total_value]) + '\n' 

は、次に(おそらく新しいファイルに)行の末尾に加算結果を追加し、ライン・バイ・ラインファイル1を読んで、あなたの「ファイル2」辞書に関連するすべての値を見つけます

残りの実装の詳細は(ファイル2から辞書を取得するなど)残しておきます。メモリ使用量は少し重いかもしれませんが、うまくいけばそれほど悪くはありません。

辞書検索で.get()メソッドを使用することに注意してください。辞書に見つからないキーがあれば、0が返されることに注意してください。あなたの状況に適しているかどうかを決定します。テキストと数字の間の変換にはstrintの使用にも注意してください。実装に基づいてこれが適切かどうかを判断します。

また、以前にPythonのリスト内包語に遭遇していない場合は、そのことについていくつかの調査を行います。これは、すべての関連する値の合計を得るために1ライナーを書くことを可能にするものです。

+0

ありがとうございました! – kelloggs

関連する問題