Python: чтение информации из .yaml - PullRequest
0 голосов
/ 21 ноября 2018

Я установил файл .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: 'operator'.

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

1 Ответ

0 голосов
/ 21 ноября 2018

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

Вместо того, чтобы иметь список станций в моем 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

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

...