1

私は困惑しています。ドキュメントを次のように構成したいのは次のとおりです。

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

次に、Python で指定されたリリースに基づいてファイルを返したいと思います。その部分は簡単ですが、値を float として返すため、問題が発生します。前処理せずに強制的に文字列にしたいと思います。(ファイルを開き、バージョンをループして、各エントリに !!python/str を追加したくありません)

タグはこれを行う方法だと思いますが、タグを定義する方法/場所に関して、ドキュメントの頭や尾を作ることはできません。

ポインタはありますか?

4

2 に答える 2

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 に答える
0

あなたがしたいことは、次のようなサブクラスLoaderと呼び出し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)

しかし、 andがadd_path_resolverどうあるべきかについてのドキュメントが見つかりません。SOME_TAGSOME_PATH

于 2011-06-28T17:47:18.757 に答える