Как увеличить скорость работы «парсера» на python?

Добрый день.
Есть скрипт на python, который разбирает csv файл из 5 столбцов и 25-30 тыс. строк.

Следовательно, в скрипте происходит итерация по файлу, выполнение кое-каких действий и запись в БД.
Такой файл скрипт разбирает за 12 минут.
Intel i7
CPython 3.3

Как можно улучшить скорость работы?
  • Вопрос задан
  • 3350 просмотров
Пригласить эксперта
Ответы на вопрос 5
maxaon
@maxaon
Парсер тут ни при чем. Вставляйте не по одной записи за раз а по 500 и более.
Ответ написан
zxmd
@zxmd
Вангую что... без исходников не вангуется.
Скорее всего дело не в парсинге CSV а в записе в БД.
Ответ написан
xlamys
@xlamys Автор вопроса
def unpack_csv(line):
    csv = line.split(";")
    csv_1 = csv[0]
    csv_2 = csv[1]
    ...
    return csv_1, csv_2, csv_3, csv_4, csv_5

db = pymysql.connect(host='', user='', passwd='', db='', charset='utf8')
cursor = db.cursor()
file = open('test.csv', 'r')

for line in file:
    number, date, fio, email, about = unpack_csv(line)
    sql = """INSERT INTO mydb(number, date, fio, email, about)
             VALUES ('%s','%s', '%s', '%s', '%s')
             """, (number, date, fio, email, about)
    cursor.execute(sql)
    db.commit()
db.close()
file.close()
Ответ написан
@mcleod095
Ну так по одной записи вставляете
введите переменную типа сколько записей за раз вставлять keys=10000
ну пока счетчик цикла меньше то ззабивайте все данные в буфер
как только равен или больше то делаешь insert с данными
обнуляем счетчик и опять читаем строки далее
ну и в конце надо не забыть скинуть последние данные в БД
Ответ написан
xlamys
@xlamys Автор вопроса
Если записывать не по одной записи, а по 10000
Результат:
CSV файл весом в 1,3 мб (20тыс.строк)
real 8.26
user 5.25
sys 0.93
Очень круто) Всем спасибо!
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Droice Labs Москва
от 120 000 до 220 000 ₽
от 80 000 до 80 000 ₽
EQWILE Казань
от 80 000 до 110 000 ₽
26 февр. 2020, в 22:39
1000 руб./за проект
26 февр. 2020, в 22:23
7000 руб./за проект