在标头中使用特定名称解析fasta

2024-10-01 22:42:29 发布

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

我有一个包含多个fasta序列的txt文件(我特别愿意将序列与基因名称一起解析)。请您帮助选择标题中具有特定名称的序列。谢谢

txt文件中的原始数据

lcl|NC_045512.2_gene_6 [gene=ORF6] [locus_tag=GU280_gp06] [db_xref=GeneID:43740572] [location=27202..27387] [gbkey=Gene] ATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGGACTTTTAAAG

在python中解析后需要的数据

ORF6 ATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGGACTTTTAAAG

我用过这个,我能得到

***from Bio import SeqIO
for record in SeqIO.parse("mytext.txt", 'fasta'):
    print(record.name) 
    print(record.seq)***

得到的结果是这样的

lcl| NC_045512.2_基因_6 ATGTTTCATCTCGTTGACTTCAGGTTACTATATAGAGAGATATATATATATATATATATAGACTTTAAG


Tags: 文件txt名称标题基因序列recordfasta
2条回答

在这里,我在python正则表达式中尝试了它

在这里,我将基因和序列分为两个序列

import re
f=open('seq',"r")
input=(f.readlines())
print(input)
patt=".+?\[gene=(.+?)]\s\[locus_tag=.+?]\s\[db_xref=GeneID:.+?]\s\ 
[location=.+?]\s\[gbkey=.+?]\s(.+)"
for i in input:
    x=re.search(patt.decode('utf-8'),i.decode('utf- 
    8'),re.DOTALL|re.MULTILINE|re.IGNORECASE|re.UNICODE)
    print x.groups()

输出将是

group1=(u'ORF6',u'ATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGG
 ACTTTTAAAG\n')
 group2=(u'ORF6',u'ATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTAT
 GAGGACTTTTAAAG\n')

因为我没有学生物学,所以我仍然对你的问题感到困惑

这个答案纯粹是为了souce_text == expected_text

from io import StringIO
from Bio import SeqIO  # pip install biopython  # https://biopython.org/wiki/Download
import re

source_text = """\
>lcl|NC_045512.2_gene_6 [gene=ORF6] [locus_tag=GU280_gp06][db_xref=GeneID:43740572] [location=27202..27387] [gbkey=Gene]
ATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGGACTTTTAAAG
"""

expected_text = """\
ORF6
ATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGGACTTTTAAAG
"""

regex = re.compile("\[gene=[\w]*\] ")  # \w: [a-zA-Z0-9_]
result = ''
for record in SeqIO.parse(StringIO(source_text), 'fasta'):
    # print(record.name)
    gene_name = regex.search(record.description).group()  # [ORF6]
    gene_name = gene_name[gene_name.find('=')+1: -2]  # ORF6
    print(gene_name)
    print(record.seq)
    result += gene_name + '\n' + record.seq + '\n'

if result == expected_text:
    print('ok')
ORF6
ATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGGACTTTTAAAG
ok

参考文献

以下是不熟悉biopython的人的参考资料


相关问题 更多 >

    热门问题