PyYAMLで改行含む文字列の出力結果を変えたい(`|` を使いたい)
はじめに
例えば、以下の様なyamlがあった時に、
# sample.yaml article: title: hello body: | Hello. This is my first posting. blah blah blah.
ただただyaml.loadしたあとにyaml.dumpするだけのコードで変換すると、以下のような結果になってしまう。
article: {body: 'Hello. This is my first posting. blah blah blah. ', title: hello}
この時のコードは以下のようなもの。
import yaml import sys data = yaml.load(sys.stdin) yaml.dump(data, sys.stdout)
元と同じような形に |
を使った状態で出力したい
|
を使った状態で出力したい
以下のようにrepreasenterを変えてあげれば出来なくもない。
import yaml import sys def _represent_str(dumper, instance): if "\n" in instance: return dumper.represent_scalar('tag:yaml.org,2002:str', instance, style='|') else: return dumper.represent_scalar('tag:yaml.org,2002:str', instance) yaml.add_representer(str, _represent_str) data = yaml.load(sys.stdin) yaml.dump(data, sys.stdout)
結果
article: body: | Hello. This is my first posting. blah blah blah. title: hello