python - 将 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' 条目。
解决方案
推荐阅读
- android - Flutter:无论平台(android,iOS),统一的容器大小
- java - 有没有办法在 JOptionPane.showMessageDialog() 上打印多行模式?
- clojure - Clojure 规范映射
- angular - 在Angular中包含导航栏的最佳方式?
- javascript - 为什么我们在 javascript 中使用 Object.defindProperty()?
- colors - Modelica 网页颜色
- tokenize2 - 是否可以选择并清除 Tokenize2 中可用的所有选项?
- mysql - 如何为 Laravel 的 prettus/l5-repository 添加多个 searchJoin 条件
- git - 重写 Git 历史记录时保持提交哈希的肮脏技巧?
- reactjs - React Native - stickyHeaderIndices 不适用于 SectionList