Самый важный принцип при работе с большими файлами — это инкрементальная обработка данных вместо чтения всего файла за раз. Это держит потребление памяти низким и постоянным независимо от размера файла.
Используй функцию-генератор для ленивого чтения и обработки одной строки за раз:
def process_large_file(filename):
with open(filename, 'r') as f:
for line in f:
yield process(line)
with гарантирует, что файл будет правильно закрытyield отдаёт одну строку за раз, не сохраняя остальноеДля CSV или табличных файлов используй pandas с параметром chunksize для загрузки данных управляемыми порциями:
for chunk in pd.read_csv('file.csv', chunksize=10000):
process(chunk)
chunk — это DataFrame с фиксированным количеством строкДля бинарных файлов или задач, критичных по производительности, есть два подхода, которые стоит выделить:
memoryview — позволяет читать срезы бинарных данных без копирования в новую памятьmmap (memory-mapped файлы) — отображает файл прямо в виртуальную память, обеспечивая произвольный доступ без полной загрузкиfile.read() или file.readlines()chunksize в pandas для структурированных данныхmmap, когда нужен произвольный доступ к большим бинарным файламИспользование pd.read_csv() с параметром chunksize загружает каждый chunk в память последовательно, гарантируя, что в любой момент времени во время итерации в памяти находится только один chunk.
Новый — ещё не проверен сообществом
Вы