Ho una lista di dizionari, che voglio serializzare:formattazione PyYAML dump() Uscita
list_of_dicts = [ { 'key_1': 'value_a', 'key_2': 'value_b'},
{ 'key_1': 'value_c', 'key_2': 'value_d'},
...
{ 'key_1': 'value_x', 'key_2': 'value_y'} ]
yaml.dump(list_of_dicts, file, default_flow_style = False)
produce i seguenti:
- key_1: value_a
key_2: value_b
- key_1: value_c
key_2: value_d
(...)
- key_1: value_x
key_2: value_y
ma mi piacerebbe ottenere questo:
- key_1: value_a
key_2: value_b
<-|
- key_1: value_c |
key_2: value_d | empty lines between blocks
(...) |
<-|
- key_1: value_x
key_2: value_y
PyYAML documentation parla di dump()
argomenti molto brevemente e non sembra hav e qualsiasi cosa su questo particolare argomento.
La modifica manuale del file per aggiungere nuove righe migliora notevolmente la leggibilità e la struttura viene comunque caricata in seguito, ma non ho idea di come generare il metodo dump.
E, in generale, c'è un modo per avere un maggiore controllo sulla formattazione dell'output oltre semplice rientro?
Grazie! Ho dovuto usare qualcosa di simile per la formattazione degli elenchi. PyYAML non inserisce il rientro prima di '-', mentre la libreria di consumo YAML che usiamo prevedeva dei rientri. Quindi dovevamo fare 'replace ('-', '-')' – Andrei
Quel nodo passivo è vero ma irrilevante, in quanto i nodi non emettono nessuna altra informazione (cioè 'ScalarNode's non emette il proprio valore)."Emettitore" ottiene il valore di un nodo (se appropriato) e lo emette, e se si aggiungono ulteriori informazioni sui nodi e si migliorano i metodi di Emettitore rilevanti per gestire queste informazioni extra (come faccio in 'ruamel.yaml'), quindi non c'è assolutamente bisogno di fare questo tipo di post-processing di tipo grossolano, basato su stringhe. – Anthon
@Andrei Con ['ruamel.yaml'] (https://pypi.python.org/pypi/ruamel.yaml) puoi impostare' yaml.indent (sequence = 3, offset = 1) 'e ottenere quell'output senza post produzione. – Anthon