#!/usr/bin/env python # coding: utf-8 # # Reading and Writing Models # Cobrapy supports reading and writing models in SBML (with and without FBC), JSON, YAML, MAT, and pickle formats. Generally, SBML with FBC version 2 is the preferred format for general use. The JSON format may be more useful for cobrapy-specific functionality. # # The package also ships with test models in various formats for testing purposes. # In[1]: import cobra.test import os from os.path import join data_dir = cobra.test.data_dir print("mini test files: ") print(", ".join(i for i in os.listdir(data_dir) if i.startswith("mini"))) textbook_model = cobra.test.create_test_model("textbook") ecoli_model = cobra.test.create_test_model("ecoli") salmonella_model = cobra.test.create_test_model("salmonella") # ## SBML # The [Systems Biology Markup Language](http://sbml.org) is an XML-based standard format for distributing models which has support for COBRA models through the [FBC extension](http://sbml.org/Documents/Specifications/SBML_Level_3/Packages/Flux_Balance_Constraints_%28flux%29) version 2. # # Cobrapy has native support for reading and writing SBML with FBCv2. Please note that all id's in the model must conform to the SBML SID requirements in order to generate a valid SBML file. # In[2]: cobra.io.read_sbml_model(join(data_dir, "mini_fbc2.xml")) # In[3]: cobra.io.write_sbml_model(textbook_model, "test_fbc2.xml") # There are other dialects of SBML prior to FBC 2 which have previously been use to encode COBRA models. The primary ones is the "COBRA" dialect which used the "notes" fields in SBML files. # # Cobrapy can use [libsbml](http://sbml.org/Software/libSBML), which must be installed separately (see installation instructions) to read and write these files. When reading in a model, it will automatically detect whether FBC was used or not. When writing a model, the use_fbc_package flag can be used can be used to write files in this legacy "cobra" format. # # Consider having the [lxml](http://lxml.de/) package installed as it can speed up parsing considerably. # In[4]: cobra.io.read_sbml_model(join(data_dir, "mini_cobra.xml")) # In[5]: cobra.io.write_sbml_model( textbook_model, "test_cobra.xml", use_fbc_package=False) # ## JSON # Cobrapy models have a [JSON](https://en.wikipedia.org/wiki/JSON) (JavaScript Object Notation) representation. This format was created for interoperability with [escher](https://escher.github.io). # In[6]: cobra.io.load_json_model(join(data_dir, "mini.json")) # In[7]: cobra.io.save_json_model(textbook_model, "test.json") # ## YAML # Cobrapy models have a [YAML](https://en.wikipedia.org/wiki/YAML) (YAML Ain't Markup Language) representation. This format was created for more human readable model representations and automatic diffs between models. # In[8]: cobra.io.load_yaml_model(join(data_dir, "mini.yml")) # In[9]: cobra.io.save_yaml_model(textbook_model, "test.yml") # ## MATLAB # Often, models may be imported and exported solely for the purposes of working with the same models in cobrapy and the [MATLAB cobra toolbox](http://opencobra.github.io/cobratoolbox/). MATLAB has its own ".mat" format for storing variables. Reading and writing to these mat files from python requires scipy. # # A mat file can contain multiple MATLAB variables. Therefore, the variable name of the model in the MATLAB file can be passed into the reading function: # In[10]: cobra.io.load_matlab_model( join(data_dir, "mini.mat"), variable_name="mini_textbook") # If the mat file contains only a single model, cobra can figure out which variable to read from, and the variable_name parameter is unnecessary. # In[11]: cobra.io.load_matlab_model(join(data_dir, "mini.mat")) # Saving models to mat files is also relatively straightforward # In[12]: cobra.io.save_matlab_model(textbook_model, "test.mat") # ## Pickle # Cobra models can be serialized using the python serialization format, [pickle](https://docs.python.org/2/library/pickle.html). # # Please note that use of the pickle format is generally not recommended for most use cases. JSON, SBML, and MAT are generally the preferred formats.