0

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

txt 文件中的原始数据。

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

在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_gene_6 ATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGGACTTTTAAAG

4

2 回答 2

0

由于我没有学习生物学,因此我仍然对您的问题感到困惑。

这个答案纯粹是为了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


于 2020-04-17T03:33:19.947 回答
0

在这里,我在 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')
于 2020-04-09T12:13:49.573 回答