python - 使用 MMCIF2Dict 解析 CIF 文件的问题

标签 python biopython

我编写了一个脚本来检索和处理蛋白质数据库中的信息。 我从 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'

预先感谢您的帮助!

最佳答案

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

file - name of the PDB file OR an open filehandle

我下载了 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']

关于python - 使用 MMCIF2Dict 解析 CIF 文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57586583/

相关文章:

python - ANARCI Python 2.7.13 - 引发 child_exception//OSError : [Errno 2]

python - 在 python 中,如何在使用 Bio.Phylo.draw() 生成系统发育树时更改叶节点的字体大小?

php - Python/PHP Tesseract 输出优化技巧

python - 如何使用 BioPython 解析不明确的字符

python - 如何计算具有多种模型/构象的蛋白质的平均结构

python - 渲染 Jinja2 宏而不影响模板的其余部分

python - NCBIblastP 命令行错误

python - 如何组合从 pandas 数据框中的 for 循环输出的多个字典?

python - Pycharm 自动完成功能在 conda env 中不起作用

python - 模式 - 没有 else if 的事件调度程序?