問題:
入力はタブ区切りファイルです。行は変数で、列はサンプルです。変数は3つの値(00,01,11)をとることができ、管理する必要のある順序(v1-> vN)でリストされます。行と列が多数あるため、入力ファイルをブロック単位で読み取る必要があります。
入力は次のようになります。
s1 s2 s3 s4 v1 00 00 11 01 v2 00 00 00 00 v3 01 11 00 00 v4 00 00 00 00 (...)
私がやろうとしているのは、入力をいくつかの行の断片に分割することです。断片は、サンプルがそれぞれ一意であるのに十分な大きさです。上記の例では、v1から開始して、最初のブロックはv3で終了する必要があります。これは、その時点でサンプルが一意であるという十分な情報があるためです。次のブロックはv4から始まり、プロセスを繰り返します。最後の行に到達すると、タスクは終了します。ブロックは出力ファイルに印刷されます。
私の試み:
私がやろうとしていたのは、csvモジュールを使用して、すべてのサンプルの単一の変数(00,01,00)の状態をそれぞれ含むリストで構成される配列を生成することです。または、入力をピボットして、各変数のサンプル状態を含むリストを作成します。作業の焦点を列と行のどちらにするか、つまりv1 = ['00'、' 00'、' 11'、'01']またはs1= ['00'、'を使用する方がよいかどうかを尋ねています。 00'、' 01'、' 00'、...]
次のコードは、列の問題を行の問題に変更しようとしたピボット操作を示しています。(不器用なPython構文については申し訳ありませんが、私ができる最善の方法です)
my_infilename='my_file.txt'
csv_infile=csv.reader(open(my_infilename,'r'), delimiter='\t')
out=open('transposed_'+my_infilename, 'w')
csv_infile=zip(*csv_infile)
line_n=0
for line in csv_infile:
line_n+=1
if line_n==1: #headers
continue
else:
line=(','.join(line)+'\n') #just to make it readable to me
out.write(line)
out.close()
この問題に取り組むための最良の方法は何ですか?ピボットは役に立ちますか?信頼できる組み込み関数はありますか?