我需要比较两个大型csv文件。
但问题是我必须用file1
的所有其他行迭代file2
的每一行,并对不同的列进行一些计算。
我在python中尝试过的部分代码:
import csv
def getOverlap(a,b):
return max(0, min(a[1], b[1]) - max(a[0], b[0]))
masterlist = [row for row in c2]
for hosts_row in c1:
chr1 = hosts_row[3]
a1 = [int(hosts_row[4]),int(hosts_row[5])]
found = False
for master_row in masterlist:
if hosts_row[7] == master_row[7]:
c3.writerow(hosts_row)
chr2 = master_row[3]
b1 = [int(master_row[4]),int(master_row[5])]
if getOverlap(a1,b1) != 0 and chr1 == chr2:
c5.writerow(hosts_row)
else:
c6.writerow(hosts_row)
found = True
break
if not found:
c4.writerow(hosts_row)
found2 = False
for master_row2 in masterlist:
chr2 = master_row[3]
b1 = [int(master_row[4]),int(master_row[5])]
if getOverlap(a1,b1) != 0 and chr1 == chr2:
c7.writerow(hosts_row)
found2 = True
break
if not found2:
c8.writerow(hosts_row)
但它需要大约5到6个小时的运行时间。有没有更快捷的方式。我有16gb ram。
答案 0 :(得分:2)
重点不在于您的文件有多大,而是您的目标和算法设计问题。
differences
。所以,也许您应该首先考虑对csv文件进行排序,以便行顺序相同,然后您只需使用模块filecpmp。
我意识到这个答案并没有真正添加任何代码,但它提供了一些思考材料。它只是渴望一个评论。
答案 1 :(得分:1)
在linux(ubuntu)中使用Meld应用程序逐行比较文件