前提・実現したいこと
Pythonで、yamlファイルを一度読み込み、再び別のyamlファイルに書き出す処理を実装しようとしています。
PyYAMLを使って書き出しをしようしているのですが、yaml.dumpをすると一部の値が勝手に書き換わってしまいます。
これを回避する方法について、アドバイスをいただきたいです。
環境
- Python 3.6.8
- PyYAML 5.3.1
発生している問題・エラーメッセージ
読み込むyamlファイルは以下の条件を満たしています。
0. 空白(null)のvalueが存在
0. true/false と yes/no のvalueが混在
0. hh:mm な形式(時刻を意図している)のvalueが存在
これを yaml.safe_load/yaml.dump すると、以下の通りに書き換わってしまいます。
0. 空白 は null に
0. yes/no は true/false に
0. hh:mm は数値に
元ファイルの値を変えることなく書き出す方法はあるのでしょうか。
試したこと
yaml.safe_load に関しては、まずreadで文字列として読み込むことで回避ができました。
しかし、yaml.dump については回避方法がわかりません。
yaml.dumpのようにyamlファイルに改行やインデントをつけて書き出したいです。
該当のソースコード / 実行内容
######file_in.yaml
yaml
1examples: 2 ex1: 3 space: 4 ex2: 5 bool1: true 6 bool2: false 7 bool3: yes 8 bool4: no 9 ex3: 10 times: 12:30
######ソース
Python3
1import yaml 2 3with open("file_in.yaml", 'rt') as f: 4 text = f.read() 5 data = yaml.safe_load(text) 6 7with open("file_out.yaml", 'w') as f: 8 yaml.dump(data, f, sort_keys=False) 9
######file_out.yaml
yaml
1examples: 2 ex1: 3 space: null 4 ex2: 5 bool1: true 6 bool2: false 7 bool3: true 8 bool4: false 9 ex3: 10 times: 750
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/24 04:54