json 在yaml语法中附加别名中的字符串值

odopli94  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(115)

如何在yaml文件中创建变量或别名,并在新创建的别名或变量中添加更多字符串数据。

  • #示例
item: &root_directory "/home/pritam/" # This is root path of root directory of a linux systme

barsrc_file: *root_directory + ".barsrc" # Try to append some string vlaue in with root_directory.
zshrc_file: *root_directory + ".zshrc"

字符串
我想创建一个变量。名称为**root_directory,**其中我不必再次输入root_directory的文本。
我使用python3.11的yaml模块在python中加载yaml文件作为dict。

import yaml

def interpolate_constructor(loader, node):
    value = loader.construct_scalar(node)
    return os.path.expandvars(value)

# Register the custom constructor
yaml.SafeLoader.add_constructor('!interpolate', interpolate_constructor)

# Load the YAML file
with open('confing.yaml') as file:
    data = yaml.safe_load(file)

# Access the values
item_value = data['item']
barcrc_file_value = data['name']['barcrc_file']

print(f"item: {item_value}")
print(f"barcrc_file: {barcrc_file_value}")

是否可以在yaml的别名中附加一些字符串vlaue。

json能满足我在变量中添加字符串值的要求吗?

esbemjvw

esbemjvw1#

YAML不是一种编程语言,没有变量或数据转换功能。有一个!!merge标记,它是过时的YAML 1.1的可选扩展,可以合并Map,但仅此而已。
当然,你也可以编写自己的构造函数来实现这一点:

import yaml

def concat_constructor(loader, node):
    return "".join(loader.construct_sequence(node))

yaml.SafeLoader.add_constructor('!concat', concat_constructor)

input = """
item: &root_directory "/home/pritam/"

barsrc_file: !concat [*root_directory, .barsrc]
zshrc_file: !concat [*root_directory, .zshrc]
"""
print(yaml.safe_load(input))

字符串
这给了

{'item': '/home/pritam/', 'barsrc_file': '/home/pritam/.barsrc', 'zshrc_file': '/home/pritam/.zshrc'}

相关问题