Как получить строку при записи хэша perl в yaml («1_1» => будет 1_1: в формате yaml) - PullRequest
1 голос
/ 22 мая 2019

У меня есть 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".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...