使用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