查找包含 5000 万行的两个 1.75 GB CSV 文件之间的集合差异 (A-B)
Finding the set difference(A-B) between two 1.75 GB CSV files containing 50 million rows
我有两个文件,每个文件有 5000 万行,每个文件大小为 1.75GB。我无法将其加载到 google colab 或我的计算机中以 运行 一个 python 脚本来查找设置差异 (A-B)。当我尝试加载数据时,我的计算机和 colab notebook 崩溃了。
如何进一步提取所需信息?
如果您无法将文件加载到内存中,您可以遍历文件 B,计算每一行的哈希值并将其存储在一个 python 集合中。然后你可以迭代文件 A 的行以相同的方式计算哈希,只保留那些不存在于集合中的行。它会运行慢,但应该运行(只要不是single-line 3gb文件)。
import hashlib
b_hashes = set()
with open('fileB','rb') as fb:
for line in fb:
b_hashes.add(line) # if line are short (<32 chars)
#b_hashes.add(hashlib.md5(line).hexdigest()) #otherwise
with open('final_file.txt','wb') as f:
with open('fileA','rb') as fa:
for line in fa:
if line not in b_hashes: # if lines are short
#if hashlib.md5(line).hexdigest() not in b_hashes: #otherwise
f.write(line)
只需使用 while 循环并逐行加载:
file1 = open ("file1.csv")
file2 = open ("file2.csv")
last1line = False
while not last1line:
line1 = file1.readline ()#important, readline not readlines!!
last1line = len (line1) == 0
last2line = False
while not last2line:
line2 = file2.readline ()
last2line = len (line2) == 0
#compare here
file2.seek (0)
Rling 可以以极快的方式为您完成此操作,实际上是我所知道的最快的方法,如果您有足够的内存,它可以在几秒钟或更短的时间内完成。它建议将内存中的输入文件大小加倍,因此在您的情况下为 3.5gb。没有内存使用选项,它会在您的 PC 上创建一个数据库,但是这种方式很慢(呃)。
https://github.com/Cynosureprime/rling
你可以这样使用它:
./rling file1 difference.txt file2
或windows
rling.exe file1 difference.txt file2
我有两个文件,每个文件有 5000 万行,每个文件大小为 1.75GB。我无法将其加载到 google colab 或我的计算机中以 运行 一个 python 脚本来查找设置差异 (A-B)。当我尝试加载数据时,我的计算机和 colab notebook 崩溃了。
如何进一步提取所需信息?
如果您无法将文件加载到内存中,您可以遍历文件 B,计算每一行的哈希值并将其存储在一个 python 集合中。然后你可以迭代文件 A 的行以相同的方式计算哈希,只保留那些不存在于集合中的行。它会运行慢,但应该运行(只要不是single-line 3gb文件)。
import hashlib
b_hashes = set()
with open('fileB','rb') as fb:
for line in fb:
b_hashes.add(line) # if line are short (<32 chars)
#b_hashes.add(hashlib.md5(line).hexdigest()) #otherwise
with open('final_file.txt','wb') as f:
with open('fileA','rb') as fa:
for line in fa:
if line not in b_hashes: # if lines are short
#if hashlib.md5(line).hexdigest() not in b_hashes: #otherwise
f.write(line)
只需使用 while 循环并逐行加载:
file1 = open ("file1.csv")
file2 = open ("file2.csv")
last1line = False
while not last1line:
line1 = file1.readline ()#important, readline not readlines!!
last1line = len (line1) == 0
last2line = False
while not last2line:
line2 = file2.readline ()
last2line = len (line2) == 0
#compare here
file2.seek (0)
Rling 可以以极快的方式为您完成此操作,实际上是我所知道的最快的方法,如果您有足够的内存,它可以在几秒钟或更短的时间内完成。它建议将内存中的输入文件大小加倍,因此在您的情况下为 3.5gb。没有内存使用选项,它会在您的 PC 上创建一个数据库,但是这种方式很慢(呃)。
https://github.com/Cynosureprime/rling
你可以这样使用它:
./rling file1 difference.txt file2
或windows
rling.exe file1 difference.txt file2