Если файл имеет форматирование в виде разрывов строк (например, пробел / новая строка с разделителем .csv), вы можете читать и обрабатывать построчно:
with open("foo.bar") as f:
for line in f:
do_something(line)
Обработка файла кусками не обязательно должна быть безобразной, например:
with open("foo.bar") as f:
for chunk in iter(lambda: f.read(128), ""):
do_something(chunk)
В вашем случае, если вы знаете размер каждого входа (пара текущего напряжения), вы можете загрузить чанк в виде необработанных байтов, чем выполнить некоторые условия для необработанных данных.
sizeDataPoint = 128
index = 0
lastIndex = None
with open("foo.bar") as f:
for chunk in iter(lambda: f.read(sizeDataPoint), ""):
if(check_conditions(chunk)):
lastIndex = index
index += 1
Если это нужно отображать в памяти, я не уверен на 100% в отношении memmap от numpy, но я помню, как использовал библиотеку Python под названием mmap (использовал ее давным-давно) для обработки очень больших файлов. Если я правильно помню, это происходит через процесс ОС, называемый «пейджинг».
Эффективность этой попытки будет зависеть от того, поддерживает ли ваша ОС ее и насколько хорошо она может обрабатывать сборку мусора при переборе файла, но я думаю, что теоретически возможно превышение лимита памяти Python с помощью mmap.
РЕДАКТИРОВАТЬ: Кроме того, mmap большой файл не будет работать, если вы не используете 64-битную ОС, так как он отображает файл в память, используя то же адресное пространство.