4  读写模型

Cobrapy 支持读取和写入 SBML(带和不带 FBC)、JSON、YAML、MAT 和 pickle 格式的模型。通常情况下,具有 FBC 版本2 的 SBML 是首选格式。JSON 格式对于某些特定于 cobrapy 的功能可能更有用。该软件包还附带各种格式的测试模型,用于测试目的。

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

data_dir = Path(".") / ".." / "src" / "cobra" / "data"
data_dir = data_dir.resolve()

print("mini test files: ")
print(", ".join(str(i) for i in data_dir.glob('mini*.*')))
from cobra.io import load_model
textbook_model = load_model("textbook")
ecoli_model = load_model("iJO1366")
logging.getLogger("cobra.io.sbml").setLevel(logging.ERROR)
salmonella_model = load_model("salmonella")

4.1 SBML

Systems Biology Markup Language 是一种基于 XML 的标准格式,用于分发模型,它通过 FBC extension版本 2 支持 COBRA 模型。

Cobrapy 原生支持使用 FBCv2 读取和写入 SBML。请注意,模型中的所有 ID 都必须符合 SBML SID 要求,才能生成有效的 SBML 文件。

mini_fbc2_path = data_dir / "mini_fbc2.xml" 
read_sbml_model(str(mini_fbc2_path.resolve()))
write_sbml_model(textbook_model, "test_fbc2.xml")

在FBC 2之前,还有其他用于编码COBRA模型的SBML方言。最主要的一种是“COBRA”方言,它在过去利用SBML文件中的“notes”字段进行编码。

Cobrapy能够使用libsbml进行SBML文件的读写操作,但需单独安装(请参阅安装指南)。在读取模型时,它会自动检测是否使用了FBC扩展。而在写入模型时,可以通过use_fbc_package标志选择使用与否,以便以这种传统的“COBRA”格式保存文件。

建议安装lxml包,因为它能显著加快解析速度。

mini_cobra_path = data_dir / "mini_cobra.xml" 
read_sbml_model(str(mini_cobra_path.resolve()))
write_sbml_model(textbook_model, "test_cobra.xml")

4.2 JSON

Cobrapy 模型具有 JSON(JavaScript 对象表示法)表示形式。创建此格式是为了与 escher 的互操作性。

mini_json_path = data_dir / "mini.json" 
load_json_model(str(mini_json_path.resolve()))
save_json_model(textbook_model, "test.json")

4.3 YAML

Cobrapy 模型具有 YAML(YAML 不是标记语言)表示形式。创建此格式是为了实现更易读的模型表示和模型之间的自动差异而创建的。

mini_yml_path = data_dir / "mini.yml"
load_yaml_model(str(mini_yml_path.resolve()))
save_yaml_model(textbook_model, "test.yml")

4.4 MATLAB

通常,导入和导出模型可能只是为了在 cobrapy 和 MATLAB cobra 工具箱中使用相同的模型。MATLAB有自己的“.mat”格式来存储变量。从 python 读取和写入这些 mat 文件需要 scipy。

一个 mat 文件可以包含多个 MATLAB 变量。因此,可以将MATLAB文件中模型的变量名称传递到读取函数中:

mini_mat_path = data_dir / "mini.mat"
load_matlab_model(
    str(mini_mat_path.resolve()),
    variable_name="mini_textbook",
)

如果 mat 文件只包含单个模型,cobra 可以确定要从哪个变量中读取,并且不需要 variable_name 参数。

mini_mat_path = data_dir / "mini.mat"
load_matlab_model(str(mini_mat_path.resolve()))

将模型保存到 mat 文件也相对简单

save_matlab_model(textbook_model, "test.mat")

4.5 Pickle

Cobra 模型可以使用 python 序列化格式 pickle 进行序列化。

请注意,对于大多数用例,通常不建议使用 pickle 格式。JSON、SBML 和 MAT 通常是首选格式。