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

2024-05-15 11:17:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理fasta格式的DNA序列数据,需要创建两个包含生物体名称和序列的列表。我遇到了下面的帖子Add multiple sequences from a FASTA file to a list in python,但是这个解决方案对我来说并不合适(我还不能评论)。在

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

>;组织1
实际操作
atcgtagbr/> ATCATGCTATTGTG
&组织 TACTGTAGCTAGTCGTAGCT
ATGACGATCGTACGTAC
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中。这似乎很明显,因为序列数据只在遇到“>;”时添加。如何确保最后一个序列也被添加?为什么没有其他人在上述链接的代码中有同样的问题?谢谢你的建议!在


Tags: 文件数据ingtfordataifline
1条回答
网友
1楼 · 发布于 2024-05-15 11:17:03

我已经用正则表达式做过了。希望你觉得有用。在

>>> 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']

相关问题 更多 >