我有以下代码,该代码读取具有10个基因序列的FASTA文件,并将每个序列作为矩阵返回。 但是,最后一个序列似乎缺少代码,我想知道为什么吗?
file=open('/Users/vivianspro/Downloads/rosalind_cons (5).txt', 'r')
line=file.readline()
strings = []
sequence=''
while line:
#line=line.rstrip('\n')
line = line.strip() #empty () automatically strips the \n
if '>' in line:
if sequence != "":
strings.append(sequence)
sequence = ""
#sequence=line
else:
sequence+=line
line=file.readline()
for s in strings:
print(s)
Motifs = []
for seq in strings:
Motifs.append(list(seq))
#make every symbol into an element in the list separated by ,
for s in Motifs:
print(s) ````
答案 0 :(得分:1)
只有在看到新的strings
时才追加到>
,但是最后一个序列之后没有一个。
这是一个重构,希望它也会更加惯用。
strings = []
sequence=''
with open('/Users/vivianspro/Downloads/rosalind_cons (5).txt', 'r') as file:
for line in file:
line = line.rstrip('\n')
if line.startswith('>'):
if sequence != "":
strings.append(sequence)
sequence = ""
else:
sequence+=line
# After the last iteration, append once more if we have something to append
if sequence:
strings.append(sequence)
答案 1 :(得分:0)
由于FASTA文件包含以下格式的数据:
>ID1
seq_1
>ID2
seq_2
...
根据您的代码,如果您的行仅包含>
,则尝试附加序列。这意味着,当您迭代ID_2时,您将添加ID_1的序列。
要解决此问题,您可以执行以下操作:
for line in file:
line = line.strip()
if '>' in line: # Line 1
line = file.readline().strip()
# print(line)
strings.append(line)
以上示例使用了这样一个事实:在FASTA文件中,序列紧随ID之后,该ID包含>
字符(您可以更改第1行,因此它仅检查第一个字符{ {1}}。