使用MMCIF2Dict解析CIF文件的问题

问题描述 投票:3回答:1

我编写了一个脚本来检索和处理蛋白质数据库中的信息。我从Bio.PDB.MMCIF2Dict导入MMCIFDict模块,该模块允许解析字典中的CIF数据。它几乎适用于我列表中的所有结构,但我不知道为什么,对于某些结构而言,它崩溃了。例如,对于PDBid 4asd,它返回键而不是值,并返回值而不是键。就像解析器翻转键和值的属性一样。

我发现的唯一解决方案是检查MMCIFDict模块生成的字典中预期的键是否存在。如果没有,我必须在相应字典的所有值中找到它。

import urllib.request
from Bio.PDB.MMCIF2Dict import MMCIF2Dict

设置pdb id的列表。这是一个4asd

的示例
pdb_list = ['4asd']

检索数据

cif_webpage = urllib.request.urlopen(f'https://files.rcsb.org/header/{pdb}.cif').read().decode('utf-8').split('\n')

创建字典

dico = MMCIF2Dict(cif_webpage)

我期望的是:

dico['_entity_src_gen.pdbx_gene_src_scientific_name'] == 'HOMO SAPIENS'

我有:

KeyError: '_entity_src_gen.pdbx_gene_src_scientific_name'

期望键不是键,而是期望值的值,现在它是键(希望我不会失去你):

dico['HOMO SAPIENS'] == '_entity_src_gen.pdbx_gene_src_scientific_name'

感谢您的帮助!

python biopython
1个回答
0
投票

您传递给MMCIF2Dict的是一个字符串列表,而根据docs参数应为:

文件-PDB文件的名称或打开的文件句柄

我下载了header / 4asd.cif,并验证了如果该参数是文件句柄,它是否可以正常工作。


或者,您可以使用gemmi解析CIF文件(免责声明:我正在研究这个项目)

from gemmi import cif
import urllib.request

pdb = '4asd'
with urllib.request.urlopen(f'https://files.rcsb.org/header/{pdb}.cif') as c:
    doc = cif.read_string(c.read())
category_dict = doc[0].get_mmcif_category('_entity_src_gen')
assert category_dict['pdbx_gene_src_scientific_name'] == ['HOMO SAPIENS']
© www.soinside.com 2019 - 2024. All rights reserved.