FASTA形式は名前つきの配列
FASTA(ファスタ)形式とは、配列に名前をつけて保存する、テキストファイルの書き方です。配列データの多くはこの形で配られるので、読み込めると自分のデータを Python で扱えます。
このレッスンでは、FASTAの文字列を読み、名前と配列に分けます。例の配列はすべて作り話です。
このレッスンのゴール
メモ
FASTA形式の文字列から、配列の名前と配列を取り出せる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| FASTA形式 | 名前と配列を交互に書くテキスト | |
| ヘッダー行 | ">" で始まり、配列の名前を書く行 | >seqA |
| レコード | 名前と配列の1組 | |
| 折り返し | 長い配列を、次の行に続けて書くこと | |
| パース | 文字列を決まりに沿って読み、使える形にすること |
学生が入力するセルは、このプレビューでは空白です。
ヘッダー行と配列の行でできている
FASTAファイルは、行でできています。">" で始まる行がヘッダー行で、その後ろに配列の名前を書きます。
配列は、次のヘッダー行まで続く行です。名前と配列の1組をレコードと呼びます。1つのファイルに、レコードをいくつでも書けます。
例: 5行のFASTAファイル
| 行 | 内容 | 役目 |
|---|---|---|
| 1 | >seqA 作り話の配列 | ヘッダー行: ">" で始まり、名前を書く |
| 2 | ATGCGT | 配列の行: 1行目の続き |
| 3 | ACGGA | 配列の行: 折り返された続き |
| 4 | >seqB | ヘッダー行: 次のレコードの始まり |
| 5 | TTGACC | 配列の行: seqB の配列 |
学生が入力するセルは、このプレビューでは空白です。
ヘッダー行だけを取り出す
docker exec jupyter python3 -c 'T=">s1 first\nATGC\nGGA\n>s2\nTT\n"; print([L[1:] for L in T.split("\n") if L.startswith(">")])'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
折り返された行は、つなげて読む
長い配列は、60文字や80文字ごとに次の行へ折り返されます。1本の配列が、何行にもなるのです。
配列を取り出すときは、ヘッダー行のあとの行を、順に1本の文字列につなぎます。つないでから、長さを数えます。
行をつなぐコード
# 折り返された配列を、1本の文字列につなぎます。
text = ">seqA 作り話\nATGC\nGGA\nTT\n"
lines = text.split("\n")
print("先頭の行:", lines[0])
joined = ""
for line in lines[1:]:
joined = joined + line
print("つないだ配列:", joined)
print("長さ:", len(joined))
# text の中の TT を消して、もう一度実行してください。
# 長さはいくつになりますか。
配列の長さを、レコードごとに数える
docker exec jupyter python3 -c 'T=">s1\nATGC\nGGA\n>s2\nTT\n"; R=T.split(">")[1:]; print([len("".join(r.split("\n")[1:])) for r in R])'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
ヘッダー行も、配列の長さに数えてしまう間違いがよくあります。ヘッダー行は名前で、配列ではありません。長さを数える前に、">" で始まる行を除いてください。
空の行と行末の文字を取り除く
ファイルの終わりには、空の行がついていることがよくあります。コンピューターによっては、行末に見えない文字が入ります。
strip を使うと、前後の空白と行末の文字が消えます。空の行は、何もせずに読み飛ばします。