Как обработать поток YAML в Python
-
06-07-2019 - |
Вопрос
У меня есть приложение командной строки, которое непрерывно выводит данные 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
Кто-нибудь может сделать лучше?
Другие советы
Кажется, что все ссылки на поток в документации относятся к потоку документов ... Я никогда не пытался использовать его так, как вы описываете, но похоже, что данные разбиваются на потоки. документов разумный подход.