私はオブジェクトの種類の一種であるカスタムオブジェクトをダンプしようとしています。だから私は、私が継承する私のクラスを設定し、そこからYAMLOBject
クラスのto_yaml
メソッドをオーバーライド:pyYAML、NodeEventは期待されていますが、DocumentEndEventを持っています
@classmethod
def to_yaml(cls, dumper, data):
""" This methods defines how to save this class to a yml
file """
passage_list = []
for passage in data:
passage_dict = {
'satellite': passage.satellite.name,
'ground_station': passage.ground_station.name,
'aos': passage.aos,
'los': passage.los,
'tca': passage.tca,
}
passage_list.append(passage_dict)
passage_list_dict = {
'passages': passage_list
}
return dumper.represent(passage_list_dict)
私はyaml.dump
メソッドを呼び出すと、出力ファイルが正しいデータで正しく作成されます。
if save_to_file:
with open(save_to_file, 'w') as f:
yaml.dump(all_passages, f, default_flow_style=False)
しかし、私はそれは私が自分のコードをデバッグされたとき、私はを得ていたので、正しくYAMLドキュメントを閉じていないに近い関連信じるEmitterError: expected NodeEvent, but got DocumentEndEvent()
を取得し、実行の終わりにファイルの最後に改行がありませんでした。それは可能性が?それとも別のことですか?
もし私が 'dumper.represent_mapping(cls.yaml_tag、passage_list_dict)'を使うのであれば動作しますが、避けたいファイルの先頭にタグを追加します。 – SolidSnake