Python:如何检查带有标题行的两个CSV文件是否包含相同的信息而忽略行和列顺序?

时间:2014-11-27 03:42:44

标签: python unit-testing csv

对于单元测试方法,我想将该方法生成的CSV文件(实际结果)与手动创建的CSV(预期结果)进行比较。

如果第一行的字段完全相同(即标题),并且剩余的行包含相同的信息,则认为文件相等。

以下事项无关紧要:列的顺序,行的顺序(标题行除外),空行,行尾编码,布尔值的编码。

3 个答案:

答案 0 :(得分:1)

  

存储在字典中,相应的csv文件头作为键,第一行作为值
  阅读第二个文件并与字典核对。

答案 1 :(得分:1)

现在已经很晚了,所以我将草拟解决方案

  1. 使用csv.reader输入数据,比较标题,规范化布尔值
  2. 暂时转置两个列表列表并在标题上对它们进行排序,如

    cols = zip(*data)
    data = zip(*sorted(cols))
    

    重复两个数据集,以便现在列在两个数据集中对齐

  3. 逐行比较两个数据集。

答案 2 :(得分:0)

我建议使用这个方法::

>>> import pyexcel as pe
>>> expected_sheet = pe.load("expected.csv", name_columns_by_row=0)
>>> actual_sheet = pe.load("actual.csv", name_columns_by_row=0)
>>> assert actual_sheet.to_dict() == expected_sheet.to_dict() # where to_dict() returns
>>> # an ordered dict of the content