.yamlファイルを更新したいのですが、各反復で、以前のデータがまだ保存されている間に.yamlファイルに新しいデータが追加されました。これが私のコードの一部です。
import yaml
num=0
for i in range(4):
num +=1
data_yaml =[{"name" : num, "point" : [x, y , z]}]
with open('points.yaml', 'w') as yaml_file:
yaml.dump(data_yaml, yaml_file)
これは、points.yamlファイルで達成したい目標出力結果です。
- name: 1
point: [0.7, -0.2, 0.22]
- name: 2
point: [0.6, -0.11, 0.8]
- name: 3
point: [0.4, -0.2, 0.6]
- name: 4
point: [0.3, -0.7, 0.8]
- name: 5
point: [0.1, -0.4, 0.2]
.yamlファイルの以前のデータの横に新しい行を自動的に追加または追加するにはどうすればよいですか?
期待される出力では、ルートレベルのデータ構造はシーケンスです。そのため、Pythonプログラムでは、空のリストから始める必要があります。(それを知らなかった場合、最も簡単な方法は.load
、手作りしたYAMLドキュメントであり、それがどのようにデータ構造Pythonになるかを確認することです。)
EOLであるPythonのバージョンを使用しているように見えるだけでなく、ruamel.yamlの古い(互換性)ルーチンも使用しているようです。前者を変更できない場合は、少なくとも新しいruamel.yamlAPIの使用を開始してください。
from __future__ import print_function
import sys
import ruamel.yaml
points = [
[0.7, -0.2, 0.22],
[0.6, -0.11, 0.8],
[0.4, -0.2, 0.6],
[0.3, -0.7, 0.8],
[0.1, -0.4, 0.2],
]
data = []
yaml = ruamel.yaml.YAML(typ='safe')
num=0
for i in range(5):
num +=1
x, y, z = points[i]
data.append({"name" : num,
"point" : [x, y , z ]
})
with open('points.yaml', 'w') as yaml_file:
yaml.dump(data, yaml_file)
with open('points.yaml') as yaml_file:
print(yaml_file.read())
これは:
- name: 1
point: [0.7, -0.2, 0.22]
- name: 2
point: [0.6, -0.11, 0.8]
- name: 3
point: [0.4, -0.2, 0.6]
- name: 4
point: [0.3, -0.7, 0.8]
- name: 5
point: [0.1, -0.4, 0.2]
引数range()
を5に変更したことに注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加