Pakiet ruamel.yaml został specjalnie ulepszony (przeze mnie począwszy od PyYAML)), aby robić tego rodzaju wycieczkę, programować, aktualizować.
Jeśli zaczniesz z (uwaga usunąłem dodatkowe początkowe spacje):
init_config: {}
instances:
- host: <IP> # update with IP
username: <username> # update with user name
password: <password> # update with password
i uruchom:
import ruamel.yaml
file_name = 'input.yml'
from ruamel.yaml.util import load_yaml_guess_indent
config, ind, bsi = load_yaml_guess_indent(open(file_name))
instances = config['instances']
instances[0]['host'] = '1.2.3.4'
instances[0]['username'] = 'Username'
instances[0]['password'] = 'Password'
ruamel.yaml.round_trip_dump(config, open('output.yml', 'w'),
indent=ind, block_seq_indent=bsi)
wyjście będzie:
init_config: {}
instances:
- host: 1.2.3.4 # update with IP
username: Username # update with user name
password: Password # update with password
Kolejność mapowania kluczy (host
, username
i password
), styl i komentarze są zachowane bez żadnych dalszych konkretnych działań.
Zamiast tiret tiret i sekwencja blok domyślić, można zrobić bardziej tradycyjne obciążenia i ustaw tiret ceni sobie:
config = ruamel.yaml.load(open(file_name), ruamel.yaml.RoundTripLoader)
ind = 6
bsi = 4
Jeśli używasz [PyYaml] (http://pyyaml.org/wiki/PyYAMLDocumentation), można używać ładowarki do ładowania d ata i Dumper, aby zapisać dane do pliku. Załadowane dane są zwykłym słownikiem w Pythonie, dzięki czemu można uzyskać dostęp do elementu za pomocą klawisza, a zatem zmienić go w dowolny sposób. –
Nie jest jasne, czy chcesz mieć silnik szablonów (i błędnie kierują przydatne odpowiedzi, będąc zbyt wąskim), czy po prostu chcesz przeanalizować YAML i zastąpić niektóre wartości ciągów na sparsowanych danych. Bądź bardziej konkretny i wyjaśnij, co możesz osiągnąć i dlaczego. – MariusSiuram
To jest plik. Muszę parsować plik yaml i zastąpić zawartość. – Chetan