使用biopython';s SeqIO
我试图解析一个蛋白质使用biopython';s SeqIO,python,parsing,biopython,Python,Parsing,Biopython,我试图解析一个蛋白质genbank文件格式,下面是一个示例文件(example.protein.gpff) 该格式具有重复的记录s(由/分隔),其中每个记录都是一种蛋白质。每个记录都有几个部分,其中有一个功能部分,带有几个固定字段,例如源、CD、和区域,其值表示特定于该记录的信息 我感兴趣的是使用biopython的SeqIO将此文件解析为一个数据框,其中列出了每个记录ID的基因、db\u外部参照,以及coded\u by字段的值,生物体和db\u外部参照值来自其源字段,以及db\u外部参照值来
genbank
文件格式,下面是一个示例文件(example.protein.gpff
)
该格式具有重复的记录
s(由/
分隔),其中每个记录
都是一种蛋白质。每个记录
都有几个部分,其中有一个功能
部分,带有几个固定字段,例如源
、CD
、和区域
,其值表示特定于该记录的信息
我感兴趣的是使用biopython
的SeqIO
将此文件解析为一个数据框
,其中列出了每个记录ID的基因
、db\u外部参照
,以及coded\u by
字段的值,生物体
和db\u外部参照
值来自其源
字段,以及db\u外部参照
值来自其区域
字段。除了在记录
的功能
部分可能多次出现的区域
字段外,CD
和源
字段在记录
的功能
部分仅出现一次
到目前为止,我的失败尝试如下所示:
from Bio import SeqIO
filename = "example.protein.gpff"
for record in SeqIO.parse(filename, "genbank"):
for feature in record.features:
if feature.type == "CDS":
symbol = feature.qualifiers.get("gene", ["???"])[0]
gene_id = feature.qualifiers.get("db_xref", ["???"])[0]
gene_id = re.sub('GeneID:', '', gene_id)
transcript_id = feature.qualifiers.get("coded_by", ["???"])[0]
transcript_id = re.sub(':.*', '', transcript_id)
if feature.type == "source":
species_name = feature.qualifiers.get("organism", ["???"])[0]
species_id = feature.qualifiers.get("db_xref", ["???"])[0]
species_id = re.sub('taxon:', '', species_id)
if feature.type == "Region":
cdd_id = feature.qualifiers.get("db_xref", ["???"])[0]
cdd_id = re.sub('CDD:', '', cdd_id)
print("%s,%s,%s,%s,%s,%s,%s" % (record.id, cdd_id, transcript_id, symbol, gene_id, species_name, species_id))
我想要获得的结果dataframe
(对于上面的示例.protein.gpff
)是:
似乎处理此文件格式的最简单方法是将其转换为JSON
格式(例如,使用),然后使用各种JSON
解析器读取它(如R
中的包,它将JSON
文件解析为记录的列表
),你能把gpff转换成xml吗?如果是这样,您可以使用DOM方法进行解析。
from Bio import SeqIO
filename = "example.protein.gpff"
for record in SeqIO.parse(filename, "genbank"):
for feature in record.features:
if feature.type == "CDS":
symbol = feature.qualifiers.get("gene", ["???"])[0]
gene_id = feature.qualifiers.get("db_xref", ["???"])[0]
gene_id = re.sub('GeneID:', '', gene_id)
transcript_id = feature.qualifiers.get("coded_by", ["???"])[0]
transcript_id = re.sub(':.*', '', transcript_id)
if feature.type == "source":
species_name = feature.qualifiers.get("organism", ["???"])[0]
species_id = feature.qualifiers.get("db_xref", ["???"])[0]
species_id = re.sub('taxon:', '', species_id)
if feature.type == "Region":
cdd_id = feature.qualifiers.get("db_xref", ["???"])[0]
cdd_id = re.sub('CDD:', '', cdd_id)
print("%s,%s,%s,%s,%s,%s,%s" % (record.id, cdd_id, transcript_id, symbol, gene_id, species_name, species_id))
record_id CDS_coded_by CDS_db_xref CDS_gene source_organism source_db_xref Region_db_xref
1 NP_001346895 NM_001359966.1:1..627 GeneID:105590766 ICAM2 Cercocebus atys taxon:9531 CDD:252248
2 NP_001346895 NM_001359966.1:1..627 GeneID:105590766 ICAM2 Cercocebus atys taxon:9531 CDD:325142
3 NP_001280013 NM_001293084.1:1..1221 GeneID:101445299 PSMC5 Dasypus novemcinctus taxon:9361 CDD:224143