yaml文件的读写,修改值的使用(详细)

YAML(YAML Ain't Markup Language的缩写)是一种人类可读的完整的数据序列化语言。通常用作软件的配置文件;
文件的标准扩展名为 .yaml,也可接受.yml扩展名;
YAML基本语法规则(基于缩进的Block Style):

  • 大小写敏感;
  • 使用缩进表示层级关系(类似Python风格);
  • 缩进不允许使用Tab制表符,只允许使用空格字符;
  • 缩进的空格数不重要,但官方推荐使用2个空格字符;

一个YAML文件或流可以包含多个文档Documents
文档可以显式地以---开头(可选的)。在规范中称此为指令结束标记,但实际使用中更多称为文档开始标记;
文档可以显式地以...结尾(可选的)。在规范中称此为文档结束标记,如果文档没有指令,可以省略---,仅用...来分割多个文档;
如果YAML文件或流仅包含一个文档,那么--- ...可以省略

目录

一、 yaml文件举例:

二、读取yaml文件 

三、写入或者是修改yaml文件 


一、 yaml文件举例:

真行啊
Friendship is best
嗯,滚吧,我爱你
就这样爱着你。
理解
 so how can you do it
You can say
remember all
input_wav: 7月9日.MP3
language: auto
result: Monday.Monday is the first day of the week.I wake up early and get ready for
  school.I have breakfast with my family.😊At school.I learn new things and play with
  my friends.😊After school.I do my homework.In the evening.I eat dinner, and watch
  TV.😊Before bed.
url: http://8.138.102.232:6006/
使用说明: language语言,支持自动识别且默认自动识别,仅包含中文,英文,粤语,日语和汉语['auto', 'zh', 'en', 'yue',
  'ja', 'ko'] input_wav代表要识别的视频,支持['flac', 'mp3', 'm4a', 'ogg', 'opus', 'wav', 'wma']

这两种都是yaml文件:

二、读取yaml文件 

 使用yaml的库便可以对其进行一系列操作:

import yaml

file='1.yaml'
with open(file, 'r', encoding='utf-8') as f:
    yaml_data = yaml.safe_load(f)
    print(yaml_data['mode_checkbox_group'])

有同学就会问了,那如果是但行读取呢,不是那种字典形式的文件,就每一行读取:

import yaml

file_path='1.yaml'
with open(file_path, 'r', encoding='utf-8') as file:
    for line in file:
        print(line)

这样便可以一行行读取 

 

三、写入或者是修改yaml文件 

import yaml

file='1.yaml'
with open(file, 'r', encoding='utf-8') as f:
    yaml_data = yaml.safe_load(f)
yaml_data['result'] = audio_dir
with open(file, "w", encoding="utf-8") as f:
    yaml.dump(yaml_data, f, allow_unicode=True)

这里大家可以看到,参数分为‘r'和’w‘,顾名思义,r为读的意思 ,没有该文件不会创建,w为写的意思,会直接写文件,没有会创建,会直接重写文件,如果参数是’a‘即会保留文件原内容的同时进行追加内容。

希望可以帮到大家!!

 

 

### 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
发出的红包

打赏作者

monster justin

感谢您的打赏,更新的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值