【发布时间】:2013-06-18 12:24:48
【问题描述】:
[使用Python3]我想比较两个csv文件的内容,如果内容相同则让脚本打印。换句话说,它应该让我知道是否所有行都匹配,如果不匹配,则不匹配的行数。
我还希望以后可以灵活地更改代码以将所有不匹配的行写入另一个文件。
此外,虽然这两个文件在技术上应该包含完全相同的内容,但行的顺序可能不同(第一行除外,它包含标题)。
输入文件如下所示:
field1 field2 field3 field4 ...
string float float string ...
string float float string ...
string float float string ...
string float float string ...
string float float string ...
... ... ... ... ...
我目前正在运行的代码如下(如下),但老实说,我不确定这是否是最好的(最 Python 的)方式。我也不确定try: while 1: ... 代码在做什么。这段代码是我搜索论坛和 python 文档的结果。到目前为止,代码运行了很长时间。
由于我是新手,我非常渴望收到有关代码的任何反馈,并且还希望对您可能提出的任何建议进行解释。
代码:
import csv
import difflib
'''
Checks the content of two csv files and returns a message.
If there is a mismatch, it will output the number of mismatches.
'''
def compare(f1, f2):
file1 = open(f1).readlines()
file2 = open(f2).readlines()
diff = difflib.ndiff(file1, file2)
count = 0
try:
while 1:
count += 1
next(diff)
except:
pass
return 'Checked {} rows and found {} mismatches'.format(len(file1), count)
print (compare('outfile.csv', 'test2.csv'))
编辑: 该文件可以包含重复项,因此无法将其存储在一个集合中(因为它会删除所有重复项,对吗?)。
【问题讨论】:
-
您提到“行的顺序可能不同”。您可以在比较之前对它们进行排序,还是您正在寻找不同的排序差异?
标签: python csv python-3.x difflib