あなたはYAMLパーサは、あなたが、本質的にawesome
前...\n
を挿入し、明示的なエンド(yaml.dump(some_obj, stream, explicit_end=True)
を()dummpと---\nawesome
(文書の区切り文字を書くときに、それはまた、動作しない場合でも、完全なストリームを消費するため、あなたがやりたいことはできません) 。YAMLパーサーは単語awesome
が¹消費の両方あなたがyaml.load_all()
を使用する場合と同様yaml.load()
を使用する場合
あなたのような何かを考えることができますので、フロントまでの部分は、正常に動作します:。
import ruamel.yaml as yaml
file_name = 'test.comb'
some_obj = dict(a = [1, 2], b = {3: 42})
with open(file_name, 'w') as stream:
stream.write('lol'.encode())
yaml.dump(some_obj, stream, explicit_end=True)
stream.write('awesome'.encode())
with open(file_name) as stream:
assert stream.read(3) == 'lol'
stream_data = ''
while True:
stream_data += stream.read(1)
if stream_data[-4:] == '...\n':
break
recovered = yaml.load(stream_data)
assert stream.read(7) == 'awesome'
print(recovered)
(Python2に)与える
:
{'a': [1, 2], 'b': {3: 42}}
とファイルの内容は、次のとおり
lola: [1, 2]
b: {3: 42}
...
awesome
Iは通常read()
操作と組み合わせることはできません同様の技術が、for line in stream
と行を読み取るを使用し、メタデータを含むYAMLヘッダーを持つファイル、通常のテキスト(インデントされていないので、emacsが正常に動作することができます)。
は、私はストリームの終わりマーカー(...
)ので、私がしようとすると、次のリリースでこれを修正しますPythonのYAMLパーサのバグを過ぎて読んでみを¹しました。