Tôi có một danh sách các từ điển, mà tôi muốn serialize:Formatting PyYAML bãi() đầu ra
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)
sản xuất như sau:
- key_1: value_a
key_2: value_b
- key_1: value_c
key_2: value_d
(...)
- key_1: value_x
key_2: value_y
Nhưng tôi muốn có được điều này:
- 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 nói về một thời gian ngắn và dường như không có e bất cứ điều gì về chủ đề cụ thể này.
Chỉnh sửa tệp theo cách thủ công để thêm dòng mới cải thiện khả năng đọc khá nhiều và cấu trúc vẫn tải tốt sau đó, nhưng tôi không biết làm cách nào để tạo phương thức kết xuất.
Và nói chung, có cách nào để có nhiều quyền kiểm soát hơn đối với định dạng đầu ra bên cạnh thụt đầu dòng đơn giản không?
Cảm ơn! Đã phải sử dụng một cái gì đó tương tự cho định dạng danh sách. PyYAML không đặt indent trước '-', trong khi YAML tiêu thụ thư viện mà chúng tôi sử dụng dự kiến một số thụt đầu dòng ở đó. Vì vậy, chúng ta phải làm 'thay thế ('-', '-')' – Andrei
Nút đó là thụ động là đúng nhưng không liên quan, vì các nút không phát ra bất kỳ thông tin nào khác (tức là 'ScalarNode' không phát ra giá trị riêng của chúng.).'Emitter' không nhận giá trị của nút (khi thích hợp) và phát ra nó, và nếu bạn gắn thêm thông tin vào các nút, và tăng cường các phương thức Emitter liên quan để xử lý thông tin bổ sung này (như tôi làm trong 'ruamel.yaml'), thì hoàn toàn không cần phải thực hiện loại xử lý hậu kỳ, thô ráp, dựa trên chuỗi đó. – Anthon
@Andrei Với ['ruamel.yaml'] (https://pypi.python.org/pypi/ruamel.yaml) bạn có thể đặt' yaml.indent (sequence = 3, offset = 1) 'và nhận được kết quả đó mà không cần sau xử lý. – Anthon