编辑yaml文件并用python保存

2024-05-19 07:07:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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)

但是它没有改变任何东西,我不确定保存部分,因为我应该获得许多具有不同logg值的yaml文件,因此我想命名有效文件


Tags: 文件csvimportyamldoclistclassgrid
1条回答
网友
1楼 · 发布于 2024-05-19 07:07:16

无需将整个CSV文件读入内存。首先读取中的YAML配置,然后在迭代CSV文件时写入新的YAML文件

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)

相关问题 更多 >

    热门问题