2015-05-20 3 views
2

У меня есть текстовый файл размером 100 ГБ, содержащий около 50 тыс. Строк, не такой же длины.Лучший способ прочитать очень большой файл в Python

Он слишком велик для размещения в памяти, поэтому в настоящее время я читаю его по строкам. Это также занимает слишком много времени. Есть ли более умный способ прочитать файл? Например, чтобы читать несколько строк за раз?

+1

Имея файл такого размера, я считаю, что более важным вопросом является «Что вы делаете с данными во время чтения?» а не как читать. – AKX

+4

Когда вы говорите «занимает слишком много времени», вам нужно посмотреть, где накладные расходы. Вы сделали предположение, что это IO замедляет ситуацию, и вы можете быть правы, но не видя кода, это невозможно сказать. – cdarke

+0

Вам нужно прочесть это по строкам? Вы могли бы просто «прочитать» максимальную сумму, которую можете прилично обработать, а затем сделать. –

ответ

5

Основная итерация по линиям файла, как это:

with open(filename) as f: 
    for line in f: 
     do_stuff(line) 

Это на самом деле читает только текущую строку в памяти и не более. Если вы хотите иметь мелкозернистый контроль над размером буфера, я предлагаю вместо этого использовать io.open (например, когда ваши линии имеют одинаковую длину, это может быть полезно).

Если операция на ваших данных на самом деле не связаны IO но ЦП, это может быть полезно использовать мультипроцессирование:

import multiprocessing 

pool = multiprocessing.Pool(8) # play around for performance 

with open(filename) as f: 
    pool.map(do_stuff, f) 

Это не ускорить фактическое чтение, но может повысить производительность при обработке строк.

+1

Использование многопроцессорности здесь во многом зависит от того, связана ли проблема с I/O или CPU. –

+2

Да, вот почему я упомянул об этом в своем ответе. – Constantinius

+0

Спасибо. Но, к сожалению, мои линии не имеют одинаковой длины. – Roy

Смежные вопросы