次の形式の大きな遺伝子ファイルを読み込んでいます
>GeneID
ACTCTCTCTATATATATATAT\n
GCTCTGCTTCTAGAGAGAGTG\n
TCTATTTGTTTATATATCTTT\n
>GeneID
GCTCTGCTTCTAGAAATTCCC\n
ACTCTGTATATATTTTCAAAA\n
GCTCTGCTTCTAGAGAGAGTG\n
各遺伝子は > で始まり、次に一意の ID です。その遺伝子のヌクレオチドの列が続きます。残念ながら、このファイルはシーケンスの各行の間に改行があるように生成されています。
各シーケンスを 1 つの連続した文字列として読み取る必要があります。そのため、次の方法を使用しています(以下を参照)。
for line in filer:
if line.startswith(">"):
# Find Sequences
seq_seg = next(filer)
seq = ""
# Concatenate lines until find next gene
while not (seq_seg.startswith(">")):
seq += seq_seg.strip() # Get rid of '\n'
seq_seg = next(filer)
while ループが失敗する条件で next が呼び出されたときに、ファイル ポインターが次の遺伝子 ID を指しているため、スクリプトがファイル内の遺伝子の半分しか取得していないことがわかりました。ループが実行されると、次のファイルに移動します。
ファイルポインタを前の行に巻き戻す方法はありますか? for ループはそれを新しい遺伝子としてキャッチしますか?
同様の質問を見たことがありますが、ファイルを読んでいる特定の方法に対処するものはありません。
for line in file:
#do stuff