строк, нашел решение с использованием chunksize этого хватит?
for row in reader: ... не очень понятно о чем вы, про пандас что ли?
ммм, а можно как-то ускорить это?
куда уж быстрее?
Пару недель назад собесился в какую-то то ли дочку вконтакта, то ли проект основанных выходцами оттуда. Короче на собесе тимлид спросил тоже как раз как обработать большой csv. Я объяснил про readlines, а он спросил про можно ли быстрее. Я объяснил про чтение чанками. Он сказал что можно ускорить чтение файлов "побитовыми сдвигами" и сказал так сделано в библиотеках типа пандаса.
Да, про пандас, сейчас у меня файл читается порядка 20 минут
«побитовый сдвиг» — это он про fseek?
кстати https://docs.python.org/3/library/io.html#io.BufferedReader юзается по дефолту при open, можно поиграть с размером буфера
выкинуть пандас уже предлагали?
ты какую-то аналитику в пандасе делаешь или нет?
попробуй ещё явно выставить типы колонок
Проблема в том, что для разных файлов они разные, то есть данные одни, но разбросаны
в смысле разбросаны?
Ну вообще я подразумевал такое решение: Мы читаем из файла чанкам read(n). Чанк добавляется в очередь (думаю deque подойдет). Из деки мы извлекаем n-ое количество строк подразумевая что строки разделены разрывом строки \n. Ну и скармливаем это тому же csv и обрабатываем.
readlines для длинных файлов - это брутально, конечно.
ну там на собесе был вопрос можно ли это сделать как-то быстрее, чем просто readlines
Ну, вообще, вопрос в том, скорость чего мы меряем. Если росто прочитать и сложить в кучу, readlines, видимо, близко к оптимальному. Но обычно с данными что-то надо делать, а вот хранить их все в памяти не обязательно.
там именно в скорости чтения файла был вопрос.
На скорость чтения из файла ты толком влиять не можешь.
да, но идея выше в том что мы реже читаем из файла и делаем это какими-то большими порциями.
Тогда вопрос нев "именно скорости чтения из файла".
Ну, так у тебя ядро будет буфферизовать чтение
Обсуждают сегодня