使用python解析yaml文件以查找重复值
我有下面的Yaml文件使用python解析yaml文件以查找重复值,python,parsing,yaml,Python,Parsing,Yaml,我有下面的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 如果
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
如果任何一个测试名称有重复值,我必须发出警报。例如,在上述情况下,由于重复测试_Name1,这将引发警报。测试名称和测试id在文件中应具有唯一值。
我曾尝试将yaml转换为dictionary,然后找出重复的值,这将错误显示为TypeError:Unhabable类型:“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文件中删除“-”。我无法更改文件中的任何内容,这将通过代码完成。:) 打印转换结果并使用它,尝试一步一步地获得结果。我就是这样想出来的:
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)
对于输入数据:
迭代单个值,“测试”
<代码>数据[键]是一个列表。您不需要更改YAML结构,但需要知道它解析为什么。对于键入数据:mapping[key]=[]mapping[key]。extend(data[key])--也不起作用expected@jonrsharpe对于键,data.items()中的值:mapping.setdefault(value,set()).add(键)--这也没有成功--我强烈建议进行基本调试-可能添加print
s以查看您实际使用的是什么。如果您不熟悉YAML语法,请确保您了解该数据的实际形状。是要删除重复项还是只显示一条消息,其中一条是重复项。添加预期的输出