Mam listę słowników, które chcą serializacji:Formatowanie PyYAML dump() Wyjście
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)
wywołuje następujące:
- key_1: value_a
key_2: value_b
- key_1: value_c
key_2: value_d
(...)
- key_1: value_x
key_2: value_y
Ale chciałbym uzyskać to:
- 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 mówi o dump()
argumenty bardzo krótko i nie wydaje się, aby hAV cokolwiek na ten konkretny temat.
Ręczne edytowanie pliku w celu dodania nowych linii poprawia znacznie czytelność, a struktura nadal ładuje się dobrze, ale nie mam pojęcia, jak utworzyć metodę zrzutów.
A ogólnie, czy istnieje sposób na uzyskanie większej kontroli nad formatowaniem wyjściowym poza prostym wcięciem?
Dzięki! Musiał użyć czegoś podobnego do formatowania list. PyYAML nie wstawia wcięcia przed '-', podczas gdy biblioteka zużywająca YAML, której używamy, oczekiwała tam pewnego wcięcia. Tak więc musieliśmy zrobić 'replace ('-', '-')' – Andrei
Ten węzeł jest pasywny jest prawdziwy, ale nie ma znaczenia, ponieważ węzły nie emitują żadnych innych informacji (np. 'ScalarNode's nie emitują własnej wartości)."Emiter" otrzymuje wartość węzła (gdy jest to właściwe) i emituje go, a jeśli załączysz dodatkowe informacje o węzłach i ulepszysz odpowiednie metody emitera, aby obsłużyć te dodatkowe informacje (tak jak robię to w 'ruamel.yaml'), to absolutnie nie ma potrzeby robienia tego rodzaju, grubego, opartego na ciągach przetwarzania końcowego. – Anthon
@Andrei Z ['ruamel.yaml'] (https://pypi.python.org/pypi/ruamel.yaml) możesz ustawić' yaml.indent (sequence = 3, offset = 1) 'i uzyskać te wyniki bez przetwarzanie końcowe. – Anthon