通过具有唯一检查

时间:2015-06-04 23:25:54

标签: python file-io merge hashtable

我有很多巨大的(> 40Gb)文本文件,它们在一个文件和其他文件中包含相同的行。我需要将Windows下的这些文件合并到一个没有行公开的大文件中。

由于快速哈希表,我想通过Python来做到这一点。

据我所知,我需要:

  1. 对每个文件进行排序
  2. 打开每个文件并逐行阅读,直到结束
  3. 像往常一样:

    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编写这个解决方案?

1 个答案:

答案 0 :(得分:0)

假设合并结果适合内存(因为可能存在重复的行),您可以创建一个set,在其中添加您从文件中读取的所有行:{{1将确保不会有重复的字符串。 要阅读文件,您可以这样做:

set

无需担心在此处阅读大文件(更多阅读:How to read large file, line by line in python

如果数据不适合内存(因此它超过32GB,实际上大于32GB),则需要将整个过程分成块。