从FASTA File中提取基因序列?

时间:2019-02-08 05:48:24

标签: python bioinformatics biopython fasta

我有以下代码,该代码读取具有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) ````


2 个答案:

答案 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}}。