2013-08-10 4 views
0

Я пытался сравнить два больших текстовых файла по строкам (по 10 ГБ каждый), не загружая целые файлы в память. Я использовал следующий код, как указано в других threads:Python Чтение больших текстовых файлов

with open(in_file1,"r") as f1, open(in_file2,"r") as f2: 
    for (line1, line2) in zip(f1, f2): 
     compare(line1, line2) 

Но, кажется, что питон не удается прочитать файл построчно. Я наблюдал использование памяти при запуске кода> 20G. Я также пробовал использовать:

import fileinput 
for (line1, line2) in zip(fileinput.input([in_file1]),fileinput.input([in_file2])): 
    compare(line1, line2) 

Это также пытается загрузить все в память. Я использую Python 2.7.4 на Centos 5.9, и я не сохранял ни одной строки в моем коде.

Что случилось с моим кодом? Как мне изменить его, чтобы не загружать все в ОЗУ? Функция

ответ

6

Пайтона zip возвращает список кортежей. Поэтому, если вы выбираете полные файлы для создания этого списка. Используйте itertools.izip вместо этого. Он вернет итератор кортежей.

with open(in_file1,"r") as f1, open(in_file2,"r") as f2: 
    for (line1, line2) in izip(f1, f2): 
     compare(line1, line2) 
Смежные вопросы