我正在编写一个python代码,能够读取YAML文件并在PySB中生成基于规则的模型。在
在YAML文件中指定一个新规则,如下所示:
--- !rule
name: L_binds_R
reaction:
L(unbound) + R(inactive) >> L(bound)%R(active)
rates:
- Kf
通过这个,我在python中创建了一个pyyaml对象(pyyaml是一个在python中使用yaml的包),并且将reaction属性存储为一个字符串。在
那么,pysb中的规则需要指定为:
^{pr2}$我的问题在于,yaml中的“reaction”字段作为字符串存储在python对象中,但pysb不接受纯文本以外的任何其他格式。在
我已经检查了PySB,并且在任何情况下,反应字段都不能是字符串,而且我没有找到如何在YAML中处理变量的格式化。在
有什么办法解决这个问题吗?在
您可以从两种方法中选择一种:重新构造YAML find以标记反应规则,或者在Python中使用
eval
。在标记化反应规则
最好的方法是构造你的YAML文件,这样你的反应规则已经在单个标记中指定了,而不仅仅是整个反应的一个字段,例如
然后,您可以编写一个解析器将其转换为以下PySB规则,使用PySB core中的类(}:
^{pr2}$MonomerPattern
、ComplexPattern
等)构建{如果您控制了YAML的来源代码,那么您可能会发现直接输出PySB代码或编写类似SBML的标准更容易,后者PySB can now read。在
{sb从一个文件中创建一个很有帮助的外部模型。在
使用
eval
另一种选择是使用
eval
。虽然这是一个更简单的解决方案,但出于安全考虑,强烈不鼓励使用这种方法*。但是,如果YAML文件都是由您/您自己的代码生成的,并且您只需要一个快速修复,这就可以了。在下面是一个例子:
*考虑一下你的山药含有以下内容:
导入该YAML文件并
eval
将删除您的主目录!eval
将按定义执行任意Python代码。它只应在源文件完全受信任的情况下使用。一般来说,您应该始终“清理您的输入”(假设输入是危险的,除非得到证明)。在相关问题 更多 >
编程相关推荐