Есть ли действительно эффективный (БЫСТРЫЙ) способ чтения больших текстовых файлов в python?

#python #python-2.7 #text-files

#python #python-2.7 #текстовые файлы

Вопрос:

Я хочу как можно быстрее открыть и извлечь данные из большого текстового файла на python (в нем почти 62603143 строки размером 550 МБ). Поскольку я не хочу нагружать свой компьютер, я делаю это следующим образом ,

 import time
start = time.time()
for line in open(filePath):
    #considering data as last element in file
    if data in line:
        do_something(data)
end = time.time()
print "processing time = %s" % (count, end-start)
  

Но, поскольку я использую описанный выше метод, для чтения полного файла требуется почти 18 секунд (на моем компьютере установлен процессор Intel i3 и 4 ГБ оперативной памяти). Аналогично, если размер файла больше, это занимает больше времени, а с точки зрения пользователя он очень большой. Я прочитал много мнений на форумах, задал несколько вопросов о переполнении стека, но не получил быстрого и эффективного способа чтения и извлечения данных из больших файлов. Действительно ли в Python есть какой-либо способ читать большие текстовые файлы за несколько секунд?

Комментарии:

1. вы могли бы использовать grep, чтобы заранее отфильтровать нужные строки, а затем запустить оставшиеся данные через python.

2. @acushner Это для Linux, я думаю, я делаю это для Windows

3. grep существует в Windows. простота установки

Ответ №1:

Нет, нет более быстрого способа обработки файла построчно, не из Python.

Ваше узкое место — это ваше оборудование, а не то, как вы читаете файл. Python уже делает все возможное (используя буфер для чтения файла большими порциями перед разделением на новые строки).

Я предлагаю обновить ваш диск до SSD.

Комментарии:

1. @ Martijn Pieters при использовании stream Reader на C # это заняло 4-5 секунд. Я искал способ python. В любом случае, спасибо..

2. @saliltamboli: так это ваша do_something() функция работает медленно? Вы рассчитали время с pass помощью instead?

3. @saliltamboli: кроме того, у вас есть for цикл, который выполняется как байт-код Python, который никогда не может быть таким быстрым, как цикл с поддержкой C # JIT, а также создавать str объект Python, который «тяжелее», чем строка C #. Вы могли бы попробовать использовать from collections import deque и deque(open(filePath), maxlen=0) вообще исключить цикл и просто читать строки, создавать строки и снова отбрасывать их.

4. Я рассчитал полное время обработки файла, просто распечатав найденные данные. Операции обработки данных не используются в этой функции. Вычисленное время процесса предназначено только для итераций.