from pathlib import Path
from cobra.io import load_json_model, save_json_model, load_matlab_model, save_matlab_model, read_sbml_model, write_sbml_model
import logging
= Path(".") / ".." / "src" / "cobra" / "data"
data_dir = data_dir.resolve()
data_dir
print("mini test files: ")
print(", ".join(str(i) for i in data_dir.glob('mini*.*')))
from cobra.io import load_model
= load_model("textbook")
textbook_model = load_model("iJO1366")
ecoli_model "cobra.io.sbml").setLevel(logging.ERROR)
logging.getLogger(= load_model("salmonella") salmonella_model
4 读写模型
Cobrapy 支持读取和写入 SBML(带和不带 FBC)、JSON、YAML、MAT 和 pickle 格式的模型。通常情况下,具有 FBC 版本2 的 SBML 是首选格式。JSON 格式对于某些特定于 cobrapy 的功能可能更有用。该软件包还附带各种格式的测试模型,用于测试目的。
4.1 SBML
Systems Biology Markup Language 是一种基于 XML 的标准格式,用于分发模型,它通过 FBC extension版本 2 支持 COBRA 模型。
Cobrapy 原生支持使用 FBCv2 读取和写入 SBML。请注意,模型中的所有 ID 都必须符合 SBML SID 要求,才能生成有效的 SBML 文件。
= data_dir / "mini_fbc2.xml"
mini_fbc2_path str(mini_fbc2_path.resolve())) read_sbml_model(
"test_fbc2.xml") write_sbml_model(textbook_model,
在FBC 2之前,还有其他用于编码COBRA模型的SBML方言。最主要的一种是“COBRA”方言,它在过去利用SBML文件中的“notes”字段进行编码。
Cobrapy能够使用libsbml进行SBML文件的读写操作,但需单独安装(请参阅安装指南)。在读取模型时,它会自动检测是否使用了FBC扩展。而在写入模型时,可以通过use_fbc_package标志选择使用与否,以便以这种传统的“COBRA”格式保存文件。
建议安装lxml包,因为它能显著加快解析速度。
= data_dir / "mini_cobra.xml"
mini_cobra_path str(mini_cobra_path.resolve())) read_sbml_model(
"test_cobra.xml") write_sbml_model(textbook_model,
4.2 JSON
Cobrapy 模型具有 JSON(JavaScript 对象表示法)表示形式。创建此格式是为了与 escher 的互操作性。
= data_dir / "mini.json"
mini_json_path str(mini_json_path.resolve())) load_json_model(
"test.json") save_json_model(textbook_model,
4.3 YAML
Cobrapy 模型具有 YAML(YAML 不是标记语言)表示形式。创建此格式是为了实现更易读的模型表示和模型之间的自动差异而创建的。
= data_dir / "mini.yml"
mini_yml_path str(mini_yml_path.resolve())) load_yaml_model(
"test.yml") save_yaml_model(textbook_model,
4.4 MATLAB
通常,导入和导出模型可能只是为了在 cobrapy 和 MATLAB cobra 工具箱中使用相同的模型。MATLAB有自己的“.mat”格式来存储变量。从 python 读取和写入这些 mat 文件需要 scipy。
一个 mat 文件可以包含多个 MATLAB 变量。因此,可以将MATLAB文件中模型的变量名称传递到读取函数中:
= data_dir / "mini.mat"
mini_mat_path
load_matlab_model(str(mini_mat_path.resolve()),
="mini_textbook",
variable_name )
如果 mat 文件只包含单个模型,cobra 可以确定要从哪个变量中读取,并且不需要 variable_name 参数。
= data_dir / "mini.mat"
mini_mat_path str(mini_mat_path.resolve())) load_matlab_model(
将模型保存到 mat 文件也相对简单
"test.mat") save_matlab_model(textbook_model,
4.5 Pickle
Cobra 模型可以使用 python 序列化格式 pickle 进行序列化。
请注意,对于大多数用例,通常不建议使用 pickle 格式。JSON、SBML 和 MAT 通常是首选格式。