проанализируйте файл yaml, чтобы найти повторяющиеся значения, используя python - PullRequest
0 голосов
/ 27 мая 2020

У меня есть файл Yaml ниже

Tests:
 - Test:
    test_name: Test_Name1
    test_id: 1
    test_desc: Test Name1
 - Test:
    test_name: Test_Name2
    test_id: 2
    test_desc: Test Name2
 - Test:
    test_name: Test_Name1
    test_id: 3
    test_desc: Test Name3

Мне нужно поднять предупреждение, если какое-либо из test_name имеет повторяющееся значение. Например, в приведенном выше случае, поскольку Test_Name1 повторяется, это вызовет предупреждение. test_name и test_id должны иметь уникальные значения в файле. Я попытался преобразовать yaml в словарь, а затем обнаружил повторяющееся значение, это показывает ошибку как TypeError: unhashable type: 'list'.

Ниже мой код

import yaml

mapping = {}
stream = open('C:/modelsData/work/tests.yaml', 'r')
data = yaml.load(stream)
for key in data:
    mapping.setdefault(data[key], set()).add(key)
print(mapping)
result = filter(lambda x: len(x)>1, mapping.values())
print("Duplicated Values ", list(result))

Обратите внимание - я не могу удалить «-» из файла yaml. По сути, я не могу ничего изменить в файле, это нужно сделать с помощью кода. :)

1 Ответ

0 голосов
/ 27 мая 2020

Распечатайте результат преобразования и поиграйте с ним, стараясь получить результат по шагам. Вот как я придумал это:

import yaml

stream = open('save_text.txt', 'r')
data = yaml.load(stream, Loader=yaml.FullLoader)

t_list = data["Tests"]

spot_duplicates = {}
for test in t_list:

    if test["Test"]["test_name"] not in spot_duplicates:
        spot_duplicates[test["Test"]["test_name"]] = 1
    else:
        spot_duplicates[test["Test"]["test_name"]] += 1

for dup in spot_duplicates:
    if spot_duplicates[dup] > 1:
        print("Duplicated value", dup)
...