Я пытаюсь записать что-то в файл .yaml, но меня смущает документация. Там сказано следующее:
Block mapping can be nested:
# YAML
hero:
hp: 34
sp: 8
level: 4
orc:
hp: 12
sp: 0
level: 2
# Python
{'hero': {'hp': 34, 'sp': 8, 'level': 4}, 'orc': {'hp': 12, 'sp': 0, 'level': 2}}
Итак, я пытаюсь получить аналогичный результат с файлом yaml, который в итоге выглядит так:
User1:
name: 'name1'
id: 001
strikes: 1
User2:
name: 'name2'
id: 002
strikes: 3
Когда я пытаюсь использовать то, что было использовано в примере из документации, это приводит к следующему:
User1: {id: '001', name: name1, strikes: 1}
User2: {id: '002', name: name2, strikes: 3}
Для этого я использовал следующий код:
strikes = {'User1': {'name': 'name1', 'id': '001', 'strikes': 1}, 'User2': {'name': 'name2', 'id': '002', 'strikes': 3}}
with open(path + "/strikes.yml", 'w+') as stream:
yaml.dump(strikes, stream)
Ну, я в основном пытаюсь написать файл yaml с помощью python, чтобы он полученные результаты в примере yaml из документов
Но вы спрашиваете о поведении, когда вы читать из файла, не так ли? Вы действительно пробовали писать, из ванильных словарей или заказных? Было ли это проблемой, не считая проблем с оформлением заказа в первом случае? Дайте минимальный воспроизводимый пример.
Да, прости. Теперь я понимаю, что мой вопрос не очень ясен. Дай мне время исправить это, пожалуйста.
Отредактировал мой вопрос, чтобы быть более ясным, надеюсь
Опять же, укажите минимальный воспроизводимый пример. Включите в свой вопрос соответствующий код. Также обратите внимание, что документы, которые вы цитируете, говорят вверху, что они оставлены для исторических целей, поэтому могут быть ненадежными.
Однако цитируемые документы - единственные, которые я смог найти, так как github ссылается только на них.
PyYAML по умолчанию записывает составные листовые узлы в потоковом стиле, а остальные - в блочном стиле.
Если вы этого не хотите, т.е. хотите, чтобы все было в блочном стиле, используйте safe_dump(data, default_flow_style=False)
:
import sys
import yaml
strikes = {'User1': {'name': 'name1', 'id': '001', 'strikes': 1}, 'User2': {'name': 'name2', 'id': '002', 'strikes': 3}}
yaml.safe_dump(strikes, sys.stdout, default_flow_style=False)
дает:
User1:
id: '001'
name: name1
strikes: 1
User2:
id: '002'
name: name2
strikes: 3
Нет причин использовать yaml.dump()
вместо yaml.safe_dump()
(и я определенно надеюсь, что вы не используете yaml.load()
вместо yaml.safe_load()
)
Большое спасибо. Это решило проблему для меня.
Это на самом деле проблема? Вы можете взаимодействовать с
OrderedDict
так же, как и с обычнымdict
.