J'ai un fichier YAML qui ressemble à ceci:
# Sense 1
- name : sense1
type : float
value : 31
# sense 2
- name : sense2
type : uint32_t
value : 1488
# Sense 3
- name : sense3
type : int32_t
value : 0
- name : sense4
type : int32_t
value : 0
- name : sense5
type : int32_t
value : 0
- name : sense6
type : int32_t
value : 0
Je veux utiliser Python pour ouvrir ce fichier, modifier certaines valeurs (voir ci-dessus) et fermer le fichier. Comment puis-je faire cela?
Par exemple, je veux définir sense2 [valeur] = 1234, en gardant la sortie YAML identique.
with open("my_file.yaml") as f:
list_doc = yaml.load(f)
for sense in list_doc:
if sense["name"] == "sense2":
sense["value"] = 1234
with open("my_file.yaml", "w") as f:
yaml.dump(list_doc, f)
Si vous vous souciez de préserver l'ordre de vos clés de mappage, le commentaire et l'espace blanc entre les éléments de la séquence de niveau racine, par exemple car ce fichier est sous contrôle de révision, vous devez utiliser ruamel.yaml
(clause de non-responsabilité: je suis l'auteur de ce package).
En supposant que votre document YAML se trouve dans le fichier input.yaml
:
import sys
import ruamel.yaml
yaml = ruamel.yaml.YAML()
# yaml.preserve_quotes = True
with open('input.yaml') as fp:
data = yaml.load(fp)
for elem in data:
if elem['name'] == 'sense2':
elem['value'] = 1234
break # no need to iterate further
yaml.dump(data, sys.stdout)
donne:
# Sense 1
- name: sense1
type: float
value: 31
# sense 2
- name: sense2
type: uint32_t
value: 1234
# Sense 3
- name: sense3
type: int32_t
value: 0
- name: sense4
type: int32_t
value: 0
- name: sense5
type: int32_t
value: 0
- name: sense6
type: int32_t
value: 0