【问题标题】:Creating lists of organism and dna sequence data from a multiple fasta file从多个 fasta 文件创建生物体和 dna 序列数据列表
【发布时间】:2014-11-12 11:18:37
【问题描述】:

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

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

>有机体1
ACTGATGACTGATCGTACGT
ATCGATCGTAGCTACGATCG
ATCATGCTATTGTG
>有机体2
TACTGTAGCTAGTCGTAGCT
ATGACGATCGTACGTCGTAC
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 中。这似乎很明显,因为仅在遇到“>”时才添加序列数据。如何确保也添加了最后一个序列?为什么没有其他人在上面链接的代码中遇到同样的问题?感谢您的建议!

【问题讨论】:

  • 你需要在for循环外面重复if data_tmp: b.append("".join(data_tmp))
  • @jonrsharpe 这确实是合乎逻辑的,而且现在有效。谢谢!

标签: python bioinformatics fasta


【解决方案1】:

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

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

【讨论】:

  • 谢谢!这似乎可以解决问题。我刚刚添加了一个替换 \r 换行符以便使用不同的文件seq=[i.replace('\n','').replace('\r','') for i in re.split(r'>\w*',data,re.DOTALL)[1:]]
  • 如果有帮助,我会很高兴接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2016-08-08
  • 2018-10-23
  • 2021-07-15
  • 2014-11-26
相关资源
最近更新 更多