Ускорьте чтение большого листа Excel с помощью Python (openpyxl)

Я пытаюсь прочитать и очистить данные на листе Excel и импортировать очищенные данные в базу данных MySQL. Моя проблема в том, что чтение части листа Excel занимает слишком много времени. Я хочу максимально оптимизировать это время.

Я пробовал следующее:

from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows


start_time = datetime.datetime.now()

wb = load_workbook(filename='Book1.xlsx', read_only=True, data_only=True)
ws=wb.active
column = ws.max_column
row = ws.max_row

for i in range(1, row+1):
    for j in range(1, column+1):
        cell_obj = ws.cell(row=i, column=j)
        if cell_obj.value != None:
            print(cell_obj.value)
    print('----------------This Row this execute--------------------------------')

end_time = datetime.datetime.now()
print(end_time-start_time)

Я очень признателен за любые предложения, например Cython, но не советую использовать файл CSV.


person Ravi    schedule 24.07.2020    source источник
comment
У меня есть открытая проблема с git. ищите помощи.   -  person Ravi    schedule 24.07.2020


Ответы (1)


Я настоятельно рекомендую использовать Pandas, поскольку в нем есть read_excel и функции to_sql, которые именно то, что вы пытаетесь сделать. Кроме того, Pandas очень быстр.

синтаксис и лучшие практики означают, что ваш код будет выглядеть так:

df = pd.read_excel("path/to/file")
df.to_sql("a_connection_string")

Действительно, вот и все!

person zerecees    schedule 24.07.2020
comment
Спасибо за ваш ответ, но он получает MemoryError из-за чтения всей строки за раз. Есть ли способ прочитать данные по частям, потому что я хочу очистить мой excel, а затем импортировать в SQL - person Ravi; 24.07.2020
comment
В конечном итоге Pandas read_excel использует один из openpyxl или xlrd, поэтому вряд ли он будет намного быстрее - person DavidW; 24.07.2020
comment
@DavidW, я полностью с вами согласен. Я могу прочитать этот Excel, разархивировав его в xml и попытавшись прочитать этот XML-лист быстрее. Спасибо, ребята, за вашу поддержку - person Ravi; 30.07.2020