Python: читать информацию из .yaml

Я создал файл .yaml, содержащий метаданные для моих точек измерения. В этом файле .yaml я использовал вложенные списки и словари, содержащие информацию, например:

stations:
  - XXXX:
      statnr: 11111
      name: NAME
      name_csv: CSV
      name_snowpack: NAME_SHORT
      lat: 11.11111
      lon: 11.22222
      alt: 1111
      type: TYPE
      operator: OPERATOR
      param: 
        - x1
        - x2
        - x3
        - x4
        - x5
  - YYYY:
      statnr: 22222
      name: NAME2
      name_csv: CSV2
      name_snowpack: NAME_SHORT2
      lat: 22.22222
      lon: 22.33333
      alt: 2222
      type: TYPE2
      operator: OPERATOR2
      param: 
        - y1
        - y2
        - y3
        - y4
        - y5

Затем я попытался прочитать определенные записи из этого файла.

import yaml
with open('./config/stations.yaml','r') as file:
    meta = yaml.load(file)
    stations = meta['stations'] 
    print(stations[0])

Это работает и распечатывает всю информацию о записи списка 'XXXX', но если я хочу получить только информацию об операторе, как я бы сделал со словарем python:

print(stations[0]['operator'])

Я получаю: KeyError: «оператор».

Итак, как я могу обратиться к этой записи или, возможно, к записям даже на один уровень ниже? Спасибо за помощь!


person Vroni    schedule 21.11.2018    source источник


Ответы (1)


Ответ на вопрос нашел сам. Очевидно, раньше этого не делали достаточно тщательно ...

Вместо того, чтобы иметь список станций в моем station.yaml, как указано выше:

stations: 
  - XXXX:
     statnr:1111
     ....
  - YYYY:
     statnr:2222
     ....

Пользуюсь другим словарем:

stations: 
  XXXX:
    statnr:1111
    param:
      -x1
      -x2
    ....
  YYYY:
    statnr:2222
    param:
      -x1
      -x2
    ....

Таким образом я могу использовать:

import yaml

with open('./config/stations.yaml','r') as file:
    meta = yaml.load(file)
    stations = meta['stations'] 
    txt = stations['XXXX']['param'][0]   
    print(txt) 

и получите результат

x1

это именно то, что я искал.

person Vroni    schedule 21.11.2018