DEPRECATED: the Phynix/yamlloader project provide an improved version of this library with unit tests, performance improvements (by providing access to the C implementation of PyYAML) and is more actively developed. You should use it!
This module provide a loader and a dumper for PyYAML allowing to keep items order
when loading a file (by putting them in OrderedDict
objects) and to manage
OrderedDict
objects when dumping to a file.
The loader is based on stackoverflow topic (thanks to Eric Naeseth): http://stackoverflow.com/questions/5121931/in-python-how-can-you-load-yaml-mappings-as-ordereddicts#answer-5121963
Self promotion: I use it a lot with clg, which allows to generate command-line definition from a configuration file, for keeping order of subcommands, options and arguments in the help message!
$ pip install yamlordereddictloader
import yaml
import yamlordereddictloader
data = yaml.load(open('myfile.yml'), Loader=yamlordereddictloader.Loader)
Note: For using the safe loader (which want standard YAML tags and does
not construct arbitrary Python objects), replace yamlorderdictloader.Loader
by
yamlorderedictloader.SafeLoader
.
import yaml
import yamlordereddictloader
from collections import OrderedDict
data = OrderedDict([
('key1', 'val1'),
('key2', OrderedDict([('key21', 'val21'), ('key22', 'val22')]))
])
yaml.dump(
data,
open('myfile.yml', 'w'),
Dumper=yamlordereddictloader.Dumper,
default_flow_style=False)
Note: For using the safe dumper (which produce standard YAML tags and does
not represent arbitrary Python objects), replace yamlorderdictloader.Dumper
by
yamlorderedictloader.SafeDumper
.