【问题标题】:Python - Compare 2 different output formats - LogicPython - 比较 2 种不同的输出格式 - 逻辑
【发布时间】:2018-10-26 16:22:46
【问题描述】:

我有一个让我难过的编程案例。我不是在寻找代码——我在寻找逻辑建议,对此我不知所措。

我尝试了几种不同的方法,但似乎没有什么能真正具体地制定出来。

这是用于回归测试。我有两个文件具有两种非常不同格式的相同数据。我需要比较数据并使过程自动化。我会在稍后阶段担心“差异”。如果我可以从两个可以比较的文件中获得数据,那应该不会太难。

文件 1 基本上包含 JSON 数据。文件中还有其他垃圾,但可以删除。这是数据的样子:

{
"Chan-1" : [ {
"key1" : "val1",
"key2" : val2,
"key3" : val3,
}, {
"key1" : "val1",
"key2" : val2,
"key3" : val3,
} ]
}

文件 2 基本上具有我可以破译为带有项目的 python 列表的内容。每个项目都有key=value格式的数据,用逗号分隔,括号中。

[
spacecraft.telemetry.channel(key1=val1,key2="val2",key3=val3),
spacecraft.telemetry.channel(key1=val1,key2="val2",key3=val3)
]

一个文件中的每个块都对应于另一个文件中的块,并且基本上如果要进行差异化。换句话说:

{
"key1" : "val1",
"key2" : val2,
"key3" : val3,
}

来自文件 1 将(或应该)具有与文件 2 相同的键值对:

(key1=val1,key2="val2",key3=val3)

顺序也类似。

这两个文件都包含大量用于“Chan-1”对象的键值对,例如,我截断了数据量。每个区块大约有16个键值对,大约有400个区块。

我尝试处理文件 2 以使其看起来像 JSON 数据。 我尝试处理文件 1 以使其看起来更像文件 2。 我还尝试将这两个文件完全解析为第三种格式。 但是我对这两个概念都没有深入了解——有些东西告诉我我遗漏了一些东西,考虑到我们已经有一个 JSON 文件,这不应该这么难。

如果有人能给我一些关于此处遵循的逻辑的建议,我将不胜感激 - 似乎是最好的路线,以及应该采用什么样的逻辑来实现这一点。

谢谢。

【问题讨论】:

  • 我会解析两者并将键值对添加到某种数据库中进行检查(或者只是输出为key:value,对它们进行排序并在结果上使用diff(1))。跨度>

标签: python json list dictionary diff


【解决方案1】:

对于每个文件:

  • 提取对象的“列表”
  • 将列表中的每个对象转换为字典
    • 对于文件 1,这一步基本上是“将 JSON 转换为 dict”
    • 对于文件 2,这将涉及仅提取 key=value 字符串,在 = 上拆分,并通过字典理解将结果转换为字典。

此时,您有两个字典列表。您的问题似乎表明您可以假设列表以相同的方式排序,因此现在您可以检查一个列表中的每个 dict 是否与另一个列表中相同位置的 dict 匹配。查看zip(list_1, list_2);它应该使这一步更容易。

【讨论】:

  • 这似乎是一种合乎逻辑的方法。我知道我将 JSON 转换为 dict,但我认为文件 2 是字典列表时遇到了一些问题。不过,你已经给出了一个很好的方向——我要再试一次。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多