Поэтапная запись из файла Python

Имеется текстовый файл, который содержит порядка 22 млн. строк и 3 столбцов. При записи всего содержимого файла в список и при выполнении операций с участием данного списка возникает нехватка оперативной памяти и MemoryError.

Знающие люди, подскажите, пожалуйста, есть ли возможность (и как её реализовать) записать условно первые 100 строк из файла в некоторый список, выполнить с его участием некоторые операции, затем записать следующие 100 строк из файла в этот же список и т.п. и так до тех пор, пока всё содержимое файла не будет считано?


Ответы (1 шт):

Автор решения: Aleksandr Batka

Самый простой пример деревенского подхода

with open("test.csv", "r") as f:
   i:int=0 #Счётчик строк
# Переворачиваем построчно
   for line in f:
      i+=1 # Увеличиваем счётчик
      print(line) # Для примера выводим строку в консоль
    # Далее на что хватит фантазии хоть ручками обрабатывай хоть 
    # используй модную библу pandas сериализуй и делай нужную магию.
   print('Обработано строк - ' + i)
# Так как используется контекстный менеджер With он сделает всю магию с закрытием файла сам в рцчную можн оне закрывать.

Пример проверил файликом на 10000000 строк. Для проверки "Быстренько" его сгенерил.

Пример генератора файла.

import random, csv, radar, string

# Переменные для генерации случайной даты
start='1988-05-20'
stop='2023-01-01'

# Генератор рандомной строки
def generate_random_string(length):
   letters = string.ascii_lowercase
   rand_string = ''.join(random.choice(letters) for i in range(length))
   return rand_string
# Генерим файлик
with open('test.csv', 'a') as csvfile:
   filewriter = csv.writer(csvfile, delimiter=',',
   quotechar='|', quoting=csv.QUOTE_MINIMAL)
   # Пишем заголовки
   filewriter.writerow(['id', 'Data', 'Random_text'])
   i=10000000 # Нужное количество записей
   # Генерим и пишем в фаил
   for it in range(i+1):
       filewriter.writerow([str(it),radar.random_time(start,stop), generate_random_string(100) ])
    print(it) # Принтуем по приколу да бы видеть что процесс жив
    

После заверщения получаем рядом с файликом скрипта фаил с данными test.csv Пробовал открыть либрой она отказывается его открыть ссылаясь на ограничение количества строк на лист. Выше описаный скрипт для построчного чтения отрабатывает с этим файлом без проблем.

→ Ссылка