ほぼ中立ブログ

少しだけ百合に偏った雑記ブログ

BiopythonでFASTAファイルの改行を削除する

【スポンサーリンク】

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への変換がなくても上のコードは問題なく動作します。挙動をわかりやすくするため、明示的に変換を行っています。

需要があるか分かりませんが、テストデータをこの記事の一番下に載せておきました。

拙い文章ですが、お読みいただきありがとうございました。

参考リンク

バイオインフォマティクス関連書籍

Dr.Bonoの生命科学データ解析 [ 坊農 秀雅 ]

価格:3,240円
(2018/10/16 22:06時点)
感想(0件)

テストデータ
>Test1 A
AAA
BBB
CCC
>Test2 B
DDD
EEE
FFF
>Test3 C
GGG
HHH
III