У меня есть приложение командной строки, которое постоянно выводит данные YAML в форме:
- col0: datum0 col1: datum1 col2: datum2 - col0: datum0 col1: datum1 col2: datum2 ...
Так будет вечно. Я хотел бы написать сценарий Python, который непрерывно считывает каждую из этих записей.
Кажется, что библиотека PyYAML лучше всего принимает полностью загруженные строки и интерпретирует их как полный документ YAML. Есть ли способ перевести PyYAML в "потоковый" режим?
Или мой единственный вариант - разбить данные самостоятельно и по крупицам передать их в PyYAML?






Все ссылки на поток в документации, похоже, относятся к потоку документов ... Я никогда не пробовал использовать его так, как вы описываете, но похоже, что разбиение данных на такой поток документов является разумный подход.
Вот что я в итоге использовал, поскольку, похоже, нет встроенного метода для выполнения того, что я хочу. Эта функция должна быть достаточно общей, чтобы она могла читать в потоке YAML и возвращать объекты верхнего уровня по мере их обнаружения.
def streamInYAML(stream):
y = stream.readline()
cont = 1
while cont:
l = stream.readline()
if len(l) == 0:
cont = 0
else:
if l.startswith(' '):
y = y + l
else:
yield yaml.load(y)
y = l
Кто-нибудь может сделать лучше?
Единственное изменение, которое я хотел бы сделать, - это
if l.startswith(' '):вif not l.startswith('-'):, поскольку это решило проблему с кодировкой, связанную с utf8, при передаче созданного раздела строки yaml загрузчику / парсеру yaml. Я думаю, это произошло из-за многострочных строк yaml внутри раздела-