gpt4 book ai didi

python - 计算两个 csv 文件之间差异的更快方法

转载 作者:太空狗 更新时间:2023-10-30 02:37:27 24 4
gpt4 key购买 nike

我正在尝试计算两个大型 csv 文件(~ 4GB)之间的差异以获得新添加的行并将它们写入输出 csv 文件。通过使用以下代码,我能够为相对较小的文件 (~50MB) 获得此功能。

input_file1 = "data.csv"
input_file2 = "data_1.csv"
output_path = "out.csv"

with open(input_file1, 'r') as t1, open(input_file2, 'r') as t2:
fileone = t1.readlines()
filetwo = t2.readlines()

with open(output_path, 'w') as outFile:
for line in filetwo:
if line not in fileone:
outFile.write(line)

但是,对于较大的文件,上述代码要么太慢(运行大约半小时),要么因内存空间不足而崩溃。

有没有更快的方法来获取大型 csv 文件的差异?

最佳答案

第二个文件你不必完整阅读,逐行阅读即可。

为了速度,只需从第一个文件中创建一个set(快速查找,如果有重复行则节省内存)。为此,您必须在写入结果时保持第二个文件打开:

input_file1 = "data.csv"
input_file2 = "data_1.csv"
output_path = "out.csv"

with open(input_file1, 'r') as t1:
fileone = set(t1)

with open(input_file2, 'r') as t2, open(output_path, 'w') as outFile:
for line in t2:
if line not in fileone:
outFile.write(line)
  • for line in t2 逐行读取文件(尽可能避免使用 readlines())所以即使文件很大,内存占用也很小.
  • fileone 确实需要一些内存,但如果它更小和/或有重复行,希望不会那么多,当然比 readlines()
  • if line not in fileone 可能看起来和以前一样,但它有平均 O(1) 复杂度,这使得程序更快

关于python - 计算两个 csv 文件之间差异的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50107166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com