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

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

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

Как можно улучшить скорость работы?
  • Вопрос задан
  • 3399 просмотров
Пригласить эксперта
Ответы на вопрос 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
Очень круто) Всем спасибо!
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы