#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. Я рассчитал полное время обработки файла, просто распечатав найденные данные. Операции обработки данных не используются в этой функции. Вычисленное время процесса предназначено только для итераций.