Python:如何检查两个具有标题行的CSV文件是否包含相同的信息,而不考虑行和列的顺序?
对于方法的单元测试,我想将该方法生成的CSV文件(实际结果)与手动创建的CSV(预期结果)进行比较 如果第一行的字段完全相同(即标题),并且如果其余行包含相同的信息,则认为这些文件是相等的 以下内容必须无关紧要:列的顺序、行的顺序(标题行除外)、空行、行尾编码、布尔值的编码 将csv文件的相应头作为键,第一行作为值存储在字典中Python:如何检查两个具有标题行的CSV文件是否包含相同的信息,而不考虑行和列的顺序?,python,unit-testing,csv,Python,Unit Testing,Csv,对于方法的单元测试,我想将该方法生成的CSV文件(实际结果)与手动创建的CSV(预期结果)进行比较 如果第一行的字段完全相同(即标题),并且如果其余行包含相同的信息,则认为这些文件是相等的 以下内容必须无关紧要:列的顺序、行的顺序(标题行除外)、空行、行尾编码、布尔值的编码 将csv文件的相应头作为键,第一行作为值存储在字典中 阅读第二个文件并用字典检查 我建议使用以下方法: >>> import pyexcel as pe >>> expected_shee
阅读第二个文件并用字典检查
我建议使用以下方法:
>>> 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
现在已经很晚了,所以我来草拟解决方案
csv.reader
输入数据,比较标题,标准化布尔值cols = zip(*data)
data = zip(*sorted(cols))
对两个数据集重复此操作,以便现在两个数据集中的列对齐字典法似乎是一条正确的道路。不幸的是,它不适用于布尔值,因为它们可以被编码为
“True”
,'TRUE'
或'TRUE'
这两个字符串是不同的,因此不相等。@布尔值被喷洒到所有列上或构成许多布尔值列的内容?@黑星布尔值出现在以“is*”开头的列中,例如“is_done”。我最终得到了一个稍微不同的解决方案:在读取和规范化数据之后,预期的和实际的数据都存储在字典列表中。然后通过unittest.assertItemsEqual()
函数比较这些参数。