Отредактируйте файл yaml и сохраните его с помощью python - PullRequest
0 голосов
/ 27 января 2020

У меня есть файл yaml, который выглядит следующим образом:

grids:
  phxgrid:
    class: spexxy.grid.FilesGrid
    filename: /home/geoffrey/Bureau/husser_interpolator/grid.csv

interpolators:
  phx:
    class: spexxy.interpolator.SplineInterpolator
    grid: phxgrid
    derivs: phxgrid

components:
  star:
    class: spexxy.component.GridComponent
    interpolator: phx
    init:
    - class:    
      values:
        logg: 4.0
        Alpha: 0.
        v: 0
        sig: 0


main:
  class: spexxy.main.ParamsFit
  components: [star]
  fixparams:
    star: [sig, Alpha, logg]

Из файла CSV я должен прочитать параметр в столбце, который я уже знаю, как сделать, и вставить его в файл yaml в строку logg: 4.0, например, переключив 4.0 на 3.2, и сохраните файл yaml для каждого значения.

Знаете ли вы, как это сделать? Спасибо

РЕДАКТИРОВАТЬ:

Итак, пока у меня есть это:

import csv
import yaml
from csv import reader

with open('params.csv', 'r') as f:
        data = list(reader(f))
        logg_list = [i[6] for i in data[1::]]

with open('config.yaml', 'rw') as ymlfile:
        doc = yaml.load(ymlfile)

for logg in logg_list:
        doc['logg'] = logg[i]
        yaml.dump(doc,ymlfile)

Но это ничего не меняет, и я не уверен насчет сохранения части так как я должен получить много yaml-файлов с разными значениями logg, и я хотел бы назвать действительные файлы в результате

1 Ответ

0 голосов
/ 27 января 2020

Нет необходимости читать весь файл CSV в память. Сначала прочитайте конфигурацию YAML, а затем запишите новые файлы YAML во время итерации файла CSV.

from csv import reader
import yaml


with open('config.yaml') as f:
    doc = yaml.load(f)

values = doc['components']['star']['init'][0]['values']
with open('params.csv') as f:
    for i, record in enumerate(reader(f)):
        values['logg'] = record[6]
        with open(f'config-{i}.yaml', 'w') as out:
            yaml.dump(doc, out)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...