我正在尝试比较 python 中的两个 csv 文件,并将差异保存到 python 2.7 中的第三个 csv 文件中。
import csv
f1 = open ("olddata/file1.csv")
oldFile1 = csv.reader(f1)
oldList1 = []
for row in oldFile1:
oldList1.append(row)
f2 = open ("newdata/file2.csv")
oldFile2 = csv.reader(f2)
oldList2 = []
for row in oldFile2:
oldList2.append(row)
f1.close()
f2.close()
set1 = tuple(oldList1)
set2 = tuple(oldList2)
print oldList2.difference(oldList1)
我收到错误消息:
Traceback (most recent call last):
File "compare.py", line 21, in <module>
print oldList2.difference(oldList1)
AttributeError: 'list' object has no attribute 'difference'
我对 python 和一般编码很陌生,而且我还没有完成这段代码(我必须确保将差异存储到变量并将差异写入新的 csv 文件。)。我一整天都在试图解决这个问题,但我就是做不到。我们将非常感谢您的帮助。
你说的差异是什么意思?这个问题的答案给了你两种不同的可能性。
如果一行被认为是相同的所有列都是一样的,那么你可以通过下面的代码得到答案:
import csv
f1 = open ("olddata/file1.csv")
oldFile1 = csv.reader(f1)
oldList1 = []
for row in oldFile1:
oldList1.append(row)
f2 = open ("newdata/file2.csv")
oldFile2 = csv.reader(f2)
oldList2 = []
for row in oldFile2:
oldList2.append(row)
f1.close()
f2.close()
print [row for row in oldList1 if row not in oldList2]
但是,如果两行相同某些关键字段(即列)是一样的,那么下面的代码会给你答案:
import csv
f1 = open ("olddata/file1.csv")
oldFile1 = csv.reader(f1)
oldList1 = []
for row in oldFile1:
oldList1.append(row)
f2 = open ("newdata/file2.csv")
oldFile2 = csv.reader(f2)
oldList2 = []
for row in oldFile2:
oldList2.append(row)
f1.close()
f2.close()
keyfield = 0 # Change this for choosing the column number
oldList2keys = [row[keyfield] for row in oldList2]
print [row for row in oldList1 if row[keyfield] not in oldList2keys]
Note:对于非常大的文件,上述代码可能运行缓慢。相反,如果您希望通过散列来加速代码,您可以使用set
转换后oldList
使用以下代码:
set1 = set(tuple(row) for row in oldList1)
set2 = set(tuple(row) for row in oldList2)
之后,您可以使用set1.difference(set2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)