У меня есть 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. Самосвал
$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
Я ожидаю, что вижу "1_1": в файле my.yaml, но я получаю 1_1: что приводит к удалению записи "11".