gra*_*lle 7 configuration yaml configuration-files data-structures
我正在为我的应用程序创建一个配置文件。为此,我决定使用 YAML,因为它简单且可靠。
我目前正在设计应用程序的一个特殊部分:在这部分中,我必须列出并配置我想要在模块中使用的所有数据集。为此,我写了这个:
// Other stuff
datasets:
rate_variation:
name: Rate variation over time # Optional
description: Description here # Optional
type: POINTS_2D
options:
REFRESH_TIME: 5 # Time of refresh in second
frequency_variation:
name: Frequency variation over time
description: Description here # Optional
type: POINTS_2D
Run Code Online (Sandbox Code Playgroud)
但经过一番思考,我对此有些怀疑。因为也许这样的东西更好:
datasets:
- id: rate_variation
name: Rate variation over time # Optional
description: Description here # Optional
type: POINTS_2D
options:
REFRESH_TIME: 5 # Time of refresh in second
- id: frequency_variation
name: Frequency variation over time
description: Description here # Optional
type: POINTS_2D
Run Code Online (Sandbox Code Playgroud)
我使用 ID 来标识脚本中的每个数据集(两个数据集必须具有不同的 ID)并为每个数据集生成输出文件。但现在,我真的不知道什么是最好的解决方案......
您建议使用什么?又是出于什么原因呢?
ddconfig使用 YAML格式可以非常干净、直接地对 YAML 进行规范化ddconfig使用 YAML格式
进行数据规范化(又名 YAML 架构定义)ddconfig:)场景:开发人员 graille_stentiplub 正在创建用于 YAML 的配置文件格式。
特别注意事项: graille_stentiplub 希望有一种简单的方法来确定何时使用列表与映射。
以下是使用 YAMLddconfig格式的简单配置文件
dataroot:
file_metadata_str: |
### <beg-block>
### - caption: "my first project"
### notes: |
### * href="//home/sm/docs/workup/my_first_project.txt"
### <end-block>
project_info:
prj_name_nice: StackOverflow Demo Answer Project
prj_name_mach: stackoverflow_demo_001a
prj_sponsor_url: /sf/ask/3804450051/
prj_dept_url: https://demo-university.edu/dept/basketweaving
dataset_recipient_list:
- graille_stentiplub@example.org
- dreftymac_lufcrom@demo-university.edu
- nobody_knows_who_you_are@example.com
dataset_variations_table:
- dvar_id: rate_variation
dvar_name: Rate variation over time # Optional
dvar_description: Description here # Optional
dvar_type: POINTS_2D
dvar_opt_refresh_per_second: 5 # Time in seconds
- dvar_id: frequency_variation
dvar_name: Frequency variation over time
dvar_description: Description here # Optional
dvar_type: POINTS_2D
Run Code Online (Sandbox Code Playgroud)
整个数据结构嵌套在一个名为dataroot(这是可选的)的顶级键下。
dataroot使 YAML 结构更易于寻址,但这不是必需的。dataroot根级目录。整个数据结构由 YAML 映射(又名字典)(又名关联数组)组成。
dataroot(如果省略 dataroot,则为顶级键)。有不同类型的映射键:
_str)表示映射值是字符串(也称为标量)值。_list) 表示映射的值是一个列表(又名序列)。_info)表示映射值是映射(又名字典)(又名关联数组)。_table)表示映射值是映射序列(也称为表)。_tree或_struct)表示支持一个或多个嵌套父子关系的复合结构。ddconfig格式与许多不同的上下文和工具非常吻合。_list由一系列没有嵌套的标量值项组成。_info由标量键和标量值(名称-值对)组成,没有嵌套。_table只是映射序列_info。_tree复合数据结构。ddconfig _info映射视为关系数据库中标准表中的单个记录。ddconfig _table映射视为关系数据库中的标准表。ddconfig格式与 YAML 锚点和别名配合良好。_info可以_table通过别名轻松地将一个或多个映射转换为映射。_info映射组合在一起形成另一个映射。_info使用第一个选项,YAML 强制不存在重复的 ID。因此,在这种情况下,支持 YAML 的编辑器可能会通过显示错误来支持您的用户。使用第二个选项,您需要检查代码中的唯一性,并且用户仅在将语法正确的 YAML 加载到应用程序中时看到错误。
\n\n然而,还有其他因素需要考虑。例如,您可能更喜欢生成的内存数据结构。如果您使用反序列化为本机数据结构的标准 YAML 实现(PyYAML、SnakeYAML 等),则 YAML 结构会强加内存中数据结构的类型(您可以通过编写自定义构造函数进行自定义,但这并不简单)。例如,如果您想询问数据集对象的 ID,则只能直接使用第二个结构 \xe2\x80\x93 如果您使用第一个结构,则需要在父表中搜索您想要的数据集值。必须得到它的ID。
\n\n所以,最终的答案是(一如既往):这取决于情况。想想你想用它做什么。对于简单的配置文件,我的第二个参数可能比第一个参数弱,但我不知道您到底想对数据做什么。
\n| 归档时间: |
|
| 查看次数: |
11511 次 |
| 最近记录: |