Python 从多个fasta文件创建生物体和dna序列数据列表

Python 从多个fasta文件创建生物体和dna序列数据列表,python,bioinformatics,fasta,Python,Bioinformatics,Fasta,我正在使用fasta格式的DNA序列数据,需要创建两个包含生物体名称和序列的列表。我看到了下面的帖子,但是这个解决方案对我来说并不合适(我还不能发表评论) fasta文件是使用以下格式的txt文件。一行以“>”开头,标记生物体名称,然后是多行序列数据。fasta文件可以包含多个组织在块中的生物体: >组织M1 ACTGATGATCGTACGT ATCGATCGTAGCTACGATCG ATCATGCTATTGTG >组织m2 TACTGTAGCTAGTCGTAGCT ATGACGATCGTACG

我正在使用fasta格式的DNA序列数据,需要创建两个包含生物体名称和序列的列表。我看到了下面的帖子,但是这个解决方案对我来说并不合适(我还不能发表评论)

fasta文件是使用以下格式的txt文件。一行以“>”开头,标记生物体名称,然后是多行序列数据。fasta文件可以包含多个组织在块中的生物体:

>组织M1
ACTGATGATCGTACGT
ATCGATCGTAGCTACGATCG
ATCATGCTATTGTG
>组织m2
TACTGTAGCTAGTCGTAGCT
ATGACGATCGTACGGTCGTAC
TAGCTGACTG

我在上面链接的帮助下编写的代码是:

data_file = open("multitest.fas","r")
data_tmp = []
a=[] #list for organisms name
b=[] #list for sequence data
for line in data_file:
    line = line.rstrip() 
    line = line.strip("\n").strip("\r") 
    for i in line:
        if line[0] == ">":
            a.append(line[1:])
            if data_tmp:
                b.append("".join(data_tmp))
                data_tmp=[]
            break
        else:
            line=line.upper()
    if all([k==k.upper() for k in line]):
        data_tmp.append(line)
print a
print b

代码工作正常,只是最后一个有机体的序列没有附加到列表b中。这似乎很明显,因为只有在遇到“>”时才添加序列数据。如何确保添加最后一个序列?为什么没有其他人在上面链接的代码中有同样的问题?谢谢你的建议

我已经用正则表达式完成了。希望对您有所帮助

>>> import re
>>> data_file = open("multitest.fas","r")
>>> data=data_file.read()
>>> org=re.findall(r'>(\w*)',data) 
>>> org
['Organism1', 'Organism2']
>>> seq=[i.replace('\n','') for i in re.split(r'>\w*',data,re.DOTALL)[1:]]
>>> seq
['ACTGATGACTGATCGTACGTATCGATCGTAGCTACGATCGATCATGCTATTGTG', 'TACTGTAGCTAGTCGTAGCTATGACGATCGTACGTCGTACTAGCTGACTG']

如果data\u tmp:b.append(“.join(data\u tmp))在
for
循环之外,您需要重复
。@jornsharpe这确实是逻辑,现在可以工作了。谢谢非常感谢。这似乎奏效了。我刚刚添加了一个换行符\r,以便处理不同的文件
seq=[I.replace('\n','').replace('\r','')for I in re.split(r'>\w*',data,re.DOTALL)[1:]
如果有帮助,最好接受这个答案。