比较 2 个单独的 csv 文件并将差异写入新的 csv 文件 - Python 2.7
Compare 2 seperate csv files and write difference to a new csv file - Python 2.7
我正在尝试比较 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 文件)。我整天都在努力解决这个问题,但我就是做不到。非常感谢您的帮助。
错误正确:元组没有"difference"方法。
我猜你想使用 set(并使元素不可变)?
set1 = set([tuple(item) for item in oldList1])
set2 = set([tuple(item) for item in oldList2])
import csv
def read_csv_file(filename):
res = []
with open(filename) as f:
for line in csv.reader(f):
res.append(line)
oldList1 = read_csv_file("olddata/file1.csv")
oldList2 = read_csv_file("olddata/file2.csv")
difference_list = []
for a,b in zip(oldList1,oldList2):
if a != b:
difference_list.append(a + '\t' + b)
最终你有一个项目列表,你可以将它们写入文件。
编辑:
在这种情况下,[a,b,c] vs [b,c,a] 将失败。如果您知道 [a,b,c] 与 [b,c,a] 应该 return 没有区别,请使用以下代码。
import csv
def read_csv_file(filename):
res = []
with open(filename) as f:
for line in csv.reader(f):
res.append(line)
oldList1 = read_csv_file("olddata/file1.csv")
oldList2 = read_csv_file("olddata/file2.csv")
difference_list = []
for a in oldList1:
for b in oldList2:
if a != b:
difference_list.append(a + '\t' + b)
你说的不同是什么意思?答案给了你两种截然不同的可能性。
如果当所有列相同时认为一行相同,那么您可以通过以下代码获得答案:
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]
注意:以上代码对于非常大的文件可能 运行 变慢。相反,如果您希望通过散列来加速代码,则可以在使用以下代码转换 oldList
之后使用 set
:
set1 = set(tuple(row) for row in oldList1)
set2 = set(tuple(row) for row in oldList2)
在此之后,您可以使用set1.difference(set2)
我正在尝试比较 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 文件)。我整天都在努力解决这个问题,但我就是做不到。非常感谢您的帮助。
错误正确:元组没有"difference"方法。
我猜你想使用 set(并使元素不可变)?
set1 = set([tuple(item) for item in oldList1])
set2 = set([tuple(item) for item in oldList2])
import csv
def read_csv_file(filename):
res = []
with open(filename) as f:
for line in csv.reader(f):
res.append(line)
oldList1 = read_csv_file("olddata/file1.csv")
oldList2 = read_csv_file("olddata/file2.csv")
difference_list = []
for a,b in zip(oldList1,oldList2):
if a != b:
difference_list.append(a + '\t' + b)
最终你有一个项目列表,你可以将它们写入文件。
编辑: 在这种情况下,[a,b,c] vs [b,c,a] 将失败。如果您知道 [a,b,c] 与 [b,c,a] 应该 return 没有区别,请使用以下代码。
import csv
def read_csv_file(filename):
res = []
with open(filename) as f:
for line in csv.reader(f):
res.append(line)
oldList1 = read_csv_file("olddata/file1.csv")
oldList2 = read_csv_file("olddata/file2.csv")
difference_list = []
for a in oldList1:
for b in oldList2:
if a != b:
difference_list.append(a + '\t' + b)
你说的不同是什么意思?答案给了你两种截然不同的可能性。
如果当所有列相同时认为一行相同,那么您可以通过以下代码获得答案:
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]
注意:以上代码对于非常大的文件可能 运行 变慢。相反,如果您希望通过散列来加速代码,则可以在使用以下代码转换 oldList
之后使用 set
:
set1 = set(tuple(row) for row in oldList1)
set2 = set(tuple(row) for row in oldList2)
在此之后,您可以使用set1.difference(set2)