Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在更短的时间内高效地比较两个巨大的csv文件_Python_Linux_Csv - Fatal编程技术网

Python 如何在更短的时间内高效地比较两个巨大的csv文件

Python 如何在更短的时间内高效地比较两个巨大的csv文件,python,linux,csv,Python,Linux,Csv,我需要比较两个大的csv文件。 但问题是我必须用file2的所有其他行迭代file1的每一行,并对不同的列进行一些计算 我在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] a

我需要比较两个大的csv文件。 但问题是我必须用
file2
的所有其他行迭代
file1
的每一行,并对不同的列进行一些计算

我在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。

关键不是文件有多大,而是目标和算法设计的问题

  • 一点是定义什么是
    差异
  • 如果两个文件上的行顺序相同,那么两个不同的行将具有不同的列
<>所以,也许你应该首先考虑对CSV文件进行排序,这样行顺序是相同的,然后你可以简单地使用这个模块。
我意识到这个答案并不是真的添加任何代码,但它提供了一些思考材料。它只是渴望一个评论

在linux(ubuntu)中使用Meld应用程序逐行比较文件

了解文件的大小可能有帮助,也可能没有帮助。为什么不将它们加载到DB中并运行SQL查询?如果文件非常大,这将导致计算机内存溢出。如果每台电脑大约6 GB,而电脑只有8 GB的RAM(就像今天普通的笔记本电脑一样)。。。你可以看到将会发生什么。所以这个答案很有问题。