Поэтапная запись из файла Python
Имеется текстовый файл, который содержит порядка 22 млн. строк и 3 столбцов. При записи всего содержимого файла в список и при выполнении операций с участием данного списка возникает нехватка оперативной памяти и MemoryError.
Знающие люди, подскажите, пожалуйста, есть ли возможность (и как её реализовать) записать условно первые 100 строк из файла в некоторый список, выполнить с его участием некоторые операции, затем записать следующие 100 строк из файла в этот же список и т.п. и так до тех пор, пока всё содержимое файла не будет считано?
Ответы (1 шт):
Самый простой пример деревенского подхода
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 Пробовал открыть либрой она отказывается его открыть ссылаясь на ограничение количества строк на лист. Выше описаный скрипт для построчного чтения отрабатывает с этим файлом без проблем.