diff два больших файла в Python - PullRequest
6 голосов
/ 04 февраля 2011

У меня есть два больших текстовых файла, около 2 ГБ каждый. Мне нужно что-то вроде diff f1.txt f2.txt. Есть ли способ быстро выполнить эту задачу в python? Стандарт difflib слишком медленный. Я предполагаю, что есть более быстрый путь, потому что difflib полностью реализован в Python.

1 Ответ

4 голосов
/ 04 февраля 2011

Как насчет использования difflib таким образом, чтобы ваш скрипт мог обрабатывать большие файлы? Не загружайте файлы в память, а перебирайте файлы файлов и разбирайте их по частям. Например, 100 строк одновременно.

import difflib

d = difflib.Differ()

f1 = open('bigfile1')
f2 = open('bigfile2')

b1 = []
b2 = []

for n, lines in enumerate(zip(f1,f2)):
    if not (n % 100 == 0):
        b1.append(lines[0])
        b2.append(lines[1])
    else:
        diff = d.compare("".join(b1), "".join(b2))
        b1 = []
        b2 = []
        print ''.join(list(diff))

diff = d.compare("".join(b1), "".join(b2))
print ''.join(list(diff))
f1.close()
f2.close()
...