改行のある文字列ファイルをリストに変換する方法
rosalindに解答する際に以下のような文字列ファイルをリストに変換する必要があり、手こずったので記事にしておこうと思います。
test_rosa.txt
>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
TGGGAACCTGCGGGCAGTAGGTGGAAT
項目名とDNA配列が交互にくり返されているファイルで すね。しかも配列は途中で改行が入っています。これを[[項目名,配列], [項目名,配列]・・・ ]という形に変換することを目指します。
方針
①一行ずつ読み込んでエスケープシーケンス(="\n")を取り除く。
②項目名とDNAを区別する。
③改行で分断されたDNAをつないで、一列の文字列にする。
④リストに[項目名,DNA]を追加する。
完成
file =open("C:/python33/test_rosa.txt").readlines() #テキストファイルを行ごとのリストに変換
List=[]
counter=-1
for line in file:
line=line.strip("\n") #各行のエスケープシーケンスを取り除く
if line.startswith(">"):
List.append([line,""]) # ">"を含む行が現れるごとにリストに項目を追加
counter +=1
else:
List[counter][1] +=line # ">"を含まない行を結合して一つの文字列を生成
先ほどのテキストを上記コードに入れて実行すると、
[['>Rosalind_6404', 'CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG'], ['>Rosalind_5959', 'CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCTATATCCATTTGTCAGCAGACACGC'], ['>Rosalind_0808', 'CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT']]
と出力されます(実際は改行なし)。