1

我难住了。这就是我想要将我的文档构建为:

release: JULY
files:
    # files
    /foo/config.py:       1.6
    /bar/dao.py:                1.19

然后我想根据 python 中给出的版本返回文件。这部分很简单,但它会将值作为浮点数返回,这会带来问题。我想在不进行预处理的情况下强制它们成为字符串。(我不想打开文件,循环浏览版本,并在每个条目前面加上 !!python/str)

我认为标签是执行此操作的方法,但我无法就如何/在何处定义标签来确定文档的正面或反面。

任何指针?

4

2 回答 2

0

看起来您想要做的是 subclassLoader和 call add_path_resolver,如下所示:

class MyLoader(yaml.Loader):
    pass
MyLoader.add_path_resolver(SOME_TAG, SOME_PATH, str)

f = open('foo.yaml')
the_data = yaml.load(f, Loader=MyLoader)

但我找不到任何关于和应该是add_path_resolver什么的文档。SOME_TAGSOME_PATH

于 2011-06-28T17:47:18.757 回答
0

您不需要指定字符串的类型,如果要将float值转储为字符串,只需先调用str()它们:

>>> d = {'release': 'JULY', 'files': {'/path/file': str(1.6), '/path/file2': str(1.9)}}

>>> print yaml.dump(d, default_flow_style=False)
files:
  /path/file: '1.6'
  /path/file2: '1.9'
release: JULY

如果你想序列化/反序列化自定义对象,你可以在某种程度上做到这一点,只需__repr__在你的类中定义:

class Foo:
    def __init__(self, x):
        self.x = x
    def __repr__(self):
        return "%s(%r)" % (self.__class__.__name__, self.x)

>>> f = Foo(0)
>>> foo = yaml.dump(f)
>>> yaml.load(foo)
<<< Foo(0)
于 2011-06-28T17:22:46.233 回答