Как оптимизировать парсинг больших csv файлов?

Есть csv файл объемом 300мб. В нем 200 000 строк вида:

текст текст; "текст в двойных кавычках; текст в двойных кавычках; текст в двойных кавычках"; текст; текст
текст текст; "текст в двойных кавычках; текст в двойных кавычках; текст в двойных кавычках"; текст; текст; текст;  текст
текст текст; текст; текст;  "текст в двойных кавычках;текст в двойных кавычках; текст в двойных кавычках"; текст; текст


Разделитель ; , но так как внутри ячеек так же встречается ; приходится делать замену с помощью регулярки, решение нашел здесь: 373729

Далее, для обработки файла использую следующий код:

$handle = fopen($file_save . $name_csv, "r");
			$data_import = array();
			if(empty($handle) === false) {
			    while(($data = fgetcsv($handle, 0, ";")) !== FALSE) {
					array_push($data_import, $data);
			    }
			    fclose($handle);
			}

проблема в том, что скрипт забирает себе 1гб оперативы. Вопрос, может я упускаю какой то более правильный способ парсинга csv файла такого объема? Регулярка и сам парсинг разнесены отдельно и количество потребляемой памяти на разбор файла указан без работы по замене разделителя.
  • Вопрос задан
  • 1028 просмотров
Решения вопроса 1
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
учитывая, что потом Вы это запихиваете в БД - пихайте сразу в БД и дальше делайте логику на SQL. будет на порядки быстрее и в разы менее прожорливо до памяти
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Почитайте про генераторы Для чего нужны Генераторы (yield) в php? (ссылку привел для примера, просто первая попалась и там как раз тоже человек показал обработку csv)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы