python使用两个yaml文件并打印不匹配的值

python使用两个yaml文件并打印不匹配的值,python,pandas,printing,yaml,diff,Python,Pandas,Printing,Yaml,Diff,我有两个不同的Yaml文件。一个yaml文件与另一个yaml文件略有不同。 我想打印两件事(即第一个文件与第二个文件的差异,然后第二个文件与第一个文件的差异)。下面是我的代码:- import yaml import pandas as pd from deepdiff import DeepDiff with open(r'C:\Users\Project\Desktop\DRsystem\stars4.yaml','r') as file: df1 = pd.io.json.jso

我有两个不同的Yaml文件。一个yaml文件与另一个yaml文件略有不同。 我想打印两件事(即第一个文件与第二个文件的差异,然后第二个文件与第一个文件的差异)。下面是我的代码:-

import yaml
import pandas as pd
from deepdiff import DeepDiff

with open(r'C:\Users\Project\Desktop\DRsystem\stars4.yaml','r') as file:
    df1 = pd.io.json.json_normalize(yaml.load(file, Loader=yaml.FullLoader))

with open(r'C:\Users\Project\Desktop\DRsystem\stars5.yaml','r') as file:
    df2 = pd.io.json.json_normalize(yaml.load(file, Loader=yaml.FullLoader))

x = df1.to_dict()
print(x)
ddiff1 = DeepDiff(df1,df2)
print(ddiff1)
print("---------")
y = df2.to_dict()
print(y)
ddiff2 = DeepDiff(df2,df1)
print(ddiff2)
输出:上面的代码打印差异,但它显示了添加的新内容(即,yaml中不完全存在的任何内容),这是好的,但它不打印任何有轻微更改的共同点。如果我们能看到附加的屏幕截图(yaml文件和我的输出都附在附件中),就更容易理解了

查询1:为什么它只打印{'root':'denmark.enabled'}},而不打印{0:True}

问题2:加拿大在两个文件中都存在,但在一个文件中它是启用的:true,而在另一个文件中它是启用的:false…那么为什么在我进行差异时,它不显示在一个文件中它是true,在另一个文件中它是false

问题1:为什么它只打印{'root3':'dankman.enabled'}},而不打印 {0:True}

{0:True}
是pandas函数
到_dict
输出的一部分(意味着行
0
具有值
True
)。它与
DeepDiff
无关

问题2:加拿大在两个文件中都存在,但在一个文件中存在 enabled:true,另一个启用的文件:false…那么为什么不是呢 当我在做一个diff时,显示它在一个文件中为真,在一个文件中为假 在另一个

尽管deepdiff试图找到“字典、iterables、字符串和其他对象的差异”,但它并没有深入研究数据帧。它只是在dataframe上迭代,这将生成列标题。因此,它会在列标题中找到任何差异。然后它迭代这些标题,而不是列中的值因此,它不会注意到列值中的任何更改

一种可能的解决方法是比较数据帧的字典表示形式:

print(DeepDiff(df1.to_dict(), df2.to_dict()))
问题1:为什么它只打印{'root3':'dankman.enabled'}},而不打印 {0:True}

{0:True}
是pandas函数
到_dict
输出的一部分(意味着行
0
具有值
True
)。它与
DeepDiff
无关

问题2:加拿大在两个文件中都存在,但在一个文件中存在 enabled:true,另一个启用的文件:false…那么为什么不是呢 当我在做一个diff时,显示它在一个文件中为真,在一个文件中为假 在另一个

尽管deepdiff试图找到“字典、iterables、字符串和其他对象的差异”,但它并没有深入研究数据帧。它只是在dataframe上迭代,这将生成列标题。因此,它会在列标题中找到任何差异。然后它迭代这些标题,而不是列中的值因此,它不会注意到列值中的任何更改

一种可能的解决方法是比较数据帧的字典表示形式:

print(DeepDiff(df1.to_dict(), df2.to_dict()))