0
f=open('sequence3.fasta', 'r')
str=''

for line in f:
    line2=line.rstrip('\n')
    if (line2[0]!='>'):
        str=str+line2
    elif (len(line)==0):
        break

str.rstrip('\n') 
f.close()

スクリプトは、3 つの DNA シーケンスを読み取り、それらを 1 つのシーケンスに接続することを想定しています。問題は、次のエラーが発生することです。

IndexError: string index out of range

そして、私がこのように書くとき:

f=open('sequence3.fasta', 'r')
str=''

for line in f:
    line.rstrip('\n')
    if (line[0]!='>'):
        str=str+line
    elif (len(line)==0):
        break

str.rstrip('\n') 
f.close()

実行されますが、間にスペースがあります。ありがとう

4

4 に答える 4

2

line.rstrip('\n')行が NOOP であるため、2 番目のバージョンはクラッシュしません。rtripは新しい文字列を返し、既存の文字列を変更しません ( line)。おそらく入力ファイルにline.rstrip空の行があり、空の行を返すため、最初のバージョンはクラッシュします。これを試して:

f=open('sequence3.fasta', 'r')
str=''

for line in f:
    line2=line.rstrip('\n')
    if line2 and line2[0]!='>':
        str=str+line2
    elif len(line)==0:
        break

if line2と同等ですif len(line2) > 0elif len(line)==0同様に、をに置き換えることができますelif not line

于 2013-08-21T16:13:14.413 に答える
0

空行の状態が間違っています。試す:

for line in f:
    line = line.rstrip('\n')

    if len(line) == 0: # or simply: if not line:
        break

    if line[0] != '>':
        str=str+line

または別の解決策は、次を使用すること.startswithです。if not line.startswith('>')

于 2013-08-21T16:13:55.207 に答える