Как обработать поток YAML в Python - PullRequest
5 голосов
/ 09 января 2009

У меня есть приложение командной строки, которое непрерывно выводит данные YAML в виде:

- col0: datum0
  col1: datum1
  col2: datum2
- col0: datum0
  col1: datum1
  col2: datum2
...

Он делает это вечно. Я хотел бы написать скрипт на Python, который непрерывно читает каждую из этих записей.

Библиотека PyYAML лучше всего воспринимает полностью загруженные строки и интерпретирует их как полный документ YAML. Есть ли способ перевести PyYAML в потоковый режим?

Или это мой единственный вариант - разбивать данные на части и постепенно передавать их в PyYAML?

Ответы [ 2 ]

4 голосов
/ 10 января 2009

Вот то, что я в итоге использовал, так как, похоже, нет встроенного метода для выполнения того, что я хочу. Эта функция должна быть достаточно универсальной, чтобы она могла читать в потоке 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

Кто-нибудь может сделать лучше?

2 голосов
/ 09 января 2009

Все ссылки на поток в документации, по-видимому, относятся к потоку документов ... Я никогда не пытался использовать его так, как вы описываете, но похоже, что данные объединяются в такой поток документов разумный подход.

...