写yaml参数文件

自己手写是个错误的选择,因为yaml语法有些讲究。所以直接用代码写。方便快捷

import yaml
import os
current_path = os.path.abspath(".")
yaml_path = os.path.join(current_path, "./gmflow/parameters.yaml")

py_object = {'padding_factor':16,
            'resume':'pretrained/gmflow_sintel-0c07dcb3.pth',
            'strict_resume':False,
            'num_scales':1,
            'feature_channels':128,
            'upsample_factor':8,
            'num_transformer_layers':6,
            'num_head':1,
            'attention_type':'swin',
            'ffn_dim_expansion':4,
            'attn_splits_list':[2],
            'corr_radius_list':[-1],
            'prop_radius_list':[-1],
            'local_rank':0,
            'inference_size':None,
            'save_flo_flow':False,
            'dir_paired_data':False,
            'pred_bidir_flow':False,
            'fwd_bwd_consistency_check':False}
file = open(yaml_path, 'w', encoding='utf-8')
yaml.dump(py_object, file)
file.close()

### C++ 中 YAML 文件操作 #### 包含必要头文件 为了使用 `yaml-cpp` 库处理 YAML 数据,在源代码中需引入相应的头文件。 ```cpp #include <iostream> #include "yaml-cpp/yaml.h" ``` 此部分确保编译器能够识别并链接至 yaml-cpp 提供的功能函数[^1]。 #### 初始化与加载配置文件 通过调用 `YAML::LoadFile()` 函数可以从指定路径加载 YAML 配置文件,并返回表示整个文档结构的根节点对象。 ```cpp YAML::Node config = YAML::LoadFile("../config.yaml"); ``` 上述语句会尝试打开位于项目目录下的 `../config.yaml` 文件,并解析其内容为内存中的树状结构,便于后续访问各个字段的数据项[^2]。 #### 访问具体键值对 一旦成功加载了 YAML 文档,则可以通过索引运算符 (`[]`) 来获取特定键对应的子节点实例;再利用 `.as<T>()` 方法完成类型转换,从而提取实际存储的信息片段。 ```cpp std::cout << "name:" << config["name"].as<std::string>() << std::endl; std::cout << "sex:" << config["sex"].as<std::string>() << std::endl; std::cout << "age:" << config["age"].as<int>() << std::endl; ``` 这里展示了如何逐个输出名为 “name”, “sex” 和 “age” 的属性值。注意每种数据类型的匹配关系对于正确解读至关重要。 #### 创建新的 YAML 节点 当需要向现有或全新的 YAML 文档添加新条目时,可以先构建好待插入的内容层次,之后借助流插入语法轻松实现保存动作。 ```cpp YAML::Emitter out; out << YAML::BeginMap; // 开始定义映射表 out << YAML::Key << "matrix"; out << YAML::Value << YAML::BeginSeq; // 列表序列化起点 for (size_t row = 0; row < matrix.rows(); ++row) { for (size_t col = 0; col < matrix.cols(); ++col) { out << matrix.at<double>(row, col); } } out << YAML::EndSeq; // 结束列表 out << YAML::EndMap; // 关闭当前作用域 std::ofstream fout("output.yaml"); fout << out.c_str(); ``` 这段示范说明怎样把 OpenCV 类型的二维数组转储成标准格式存盘[^3]。 #### 完整示例程序清单 下面给出一个完整的例子,它综合运用以上介绍的技术要点完成了基本功能演示: ```cpp #include <iostream> #include "yaml-cpp/yaml.h" int main() { try { // 加载已有设置 YAML::Node doc = YAML::LoadFile("input.yaml"); // 输出某些感兴趣的部分 std::cout << "Original name: " << doc["person"]["name"].as<std::string>() << '\n'; // 修改某一项参数 doc["person"]["age"] = 30; // 添加全新节段 doc["new_section"] = "This is a new section"; // 将更新后的版本出到另一位置 std::ofstream ofs("modified.yaml"); ofs << doc; std::cout << "Successfully written modified data to 'modified.yaml'\n"; } catch (const YAML::Exception& e) { std::cerr << "Error while processing YAML file:\n" << e.what() << "\n"; return EXIT_FAILURE; } return EXIT_SUCCESS; } ``` 该案例不仅涵盖了基础 CRUD 操作模式,还加入了异常捕获机制以增强健壮性和用户体验友好度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值