首页 > 解决方案 > 将 perl 哈希写入 yaml 时如何获取字符串('1_1' => will be 1_1: in yaml format)

问题描述

我有一个 perl 脚本,它使用 YAML::DumpFile 将哈希写入文件。perl 哈希包含像 '11': 和 '1_1': 这样的键。当我查看 yaml 文件时,我发现不再有字符串,它是 11: 和 1_1: (据我所知是有效的 yaml 语法)。问题是当我用 python 读取这个带有非字符串标记键的文件时,我丢失了一个条目,因为 11: 和 1_1: 都被处理为 11:。

过去我尝试了在网上找到的不同建议,但没有一个能解决我的问题。

此代码生成 my.yaml 文件

use Data::Dumper;  
use YAML;
my %hash = (
           '11'  => { 'TEST' => 'my_test_1' },
           '1_1' => { 'TEST' => 'my_test_2' }
           );

print Dumper \%hash;

YAML::DumpFile( "my.yaml",\%hash );

此代码使用 my.yaml 文件

import yaml

def my_construct_mapping(self, node, deep=False):
    data = self.construct_mapping_org(node, deep)
    return {(str(key) if isinstance(key, int) else key): data[key] for key in data}

yaml.SafeLoader.construct_mapping_org = yaml.SafeLoader.construct_mapping
yaml.SafeLoader.construct_mapping = my_construct_mapping

data = yaml.safe_load(open('my.yaml').read())
print(data)

文件和打印输出如下:

perl print.Dumper

$VAR1 = {
          '1_1' => {
                     'TEST' => 'my_test_2'
                   },
          '11' => {
                    'TEST' => 'my_test_1'
                  }
        };

所以 '1_1' 寻找我喜欢的字符串。

my.yaml 看起来像:

---
11:
  TEST: my_test_1
1_1:
  TEST: my_test_2

我希望我在 my.yaml 文件中看到一个 '1_1': 但我得到 1_1: 这会导致删除 '11' 条目。

标签: pythonstringperlintegeryaml

解决方案


推荐阅读