FASTAファイルの配列が途中で改行され、複数行に渡っている場合があります。通常は問題ないのですがたまに不便なときがあるので、Biopythonを使って不要な改行を削除し配列行を一行にします。
完成形のコードは以下のとおりです。結果の出力先は標準出力です。ごく簡単ですが解説もその下に載せました。
#!/usr/bin/env python3 import sys from Bio import SeqIO def delete_LF(fasta): for record in SeqIO.parse(fasta, "fasta"): desc = record.description seq = str(record.seq) print(">{0}\n{1}".format(desc, seq)) if __name__ == '__main__': fas = sys.argv[1] delete_LF(fas)
FASTAファイルの読み込みはSeqIO.parseを使うと簡単です。同様の関数にSeqIO.readがありますが、こちらはファイルに記載されている配列が1つだけのときに使います。
SeqIO.parseで配列を1つずつ読み込みます。このときBiopython側で配列の途中にある改行を無視して配列を認識してくれるため、特に意識することなく不要な改行を削除することができます。
record.descriptionでヘッダ行の情報を取得しています。record.idで>の直後から最初のスペースの直前までの文字列を抜き出すことができるので、必要に応じて変更します。
parseまたはreadでは、配列がSeqRecordオブジェクトとして読み込まれます。そのため、上のコードではこれをstrに変換しています。ただ、SeqRecordオブジェクトをコード中で文字列のように扱うと、自動で対応してくれるようになっているため、実際はstrへの変換がなくても上のコードは問題なく動作します。挙動をわかりやすくするため、明示的に変換を行っています。
需要があるか分かりませんが、テストデータをこの記事の一番下に載せておきました。
拙い文章ですが、お読みいただきありがとうございました。
参考リンク
テストデータ
>Test1 A AAA BBB CCC >Test2 B DDD EEE FFF >Test3 C GGG HHH III