我有很多巨大的(> 40Gb)文本文件,它们在一个文件和其他文件中包含相同的行。我需要将Windows下的这些文件合并到一个没有行公开的大文件中。
由于快速哈希表,我想通过Python来做到这一点。
据我所知,我需要:
sort(file1)
sort(file2)
openRead(file1)
openRead(file2)
openWrite(file3)
string previousLine = ""
string line1 = read(file1)
string line2 = read(file2)
do {
if (line1 > line2) {
if (previousLine != line2) {
write(line2, file3)
previousLine = line2
}
line2 = read(file2)
} else {
if (line2 > line1) {
if (previousLine != line1) {
write(line1, file3)
previousLine = line1
}
line1 = read(file1)
} else {
if (previousLine != line1) {
write(line1, file3)
previousLine = line1
}
line1 = read(file1)
line2 = read(file2)
}
}
} while (!Eof(file1) && !Eof(file2))
readBiggerFileToEndAndWriteLinesTo(file3)
这个想法是否正确?或者Python提出更快的解决方案? (我只有32Gb内存)。我怎样才能用Python编写这个解决方案?
答案 0 :(得分:0)
假设合并结果适合内存(因为可能存在重复的行),您可以创建一个set
,在其中添加您从文件中读取的所有行:{{1将确保不会有重复的字符串。
要阅读文件,您可以这样做:
set
无需担心在此处阅读大文件(更多阅读:How to read large file, line by line in python)
如果数据不适合内存(因此它超过32GB,实际上大于32GB),则需要将整个过程分成块。