Найти - Пользователи
Полная версия: Извлечь содержимое excel ячейки из 22000 строк
Начало » Python для новичков » Извлечь содержимое excel ячейки из 22000 строк
1
Yuriy_V
Доброго времени суток.

Стоит задача найти и извлечь содержимое excel ячейки из 22000 строк. Задачу эту решаю через модуль win32com. Пробегаюсь с помощью for по указанному диапазону и извлекаю то что мне нужно, но из-за такого количества строк этот процесс очень долгий около 50секунд, хотя в самом екселе процесс в этом диапазоне занимает пол секунды. Как ускорить это процесс?

Заранее благодарен.
 for i in range(1, 22000): 
    val = sheet.Cells(i, 5).value  # получаем из книги excel ячеку с телефоном
    if val == phone:
        print('Привет')
doza_and
Yuriy_V
этот процесс очень долгий около 50секунд
Все варинаты сводятся к тому чтобы выкинуть в топку эксел(который должен загрузиться и загрузить файл, что занимает немало времени) и com интерфейсы (которые сами по себе безумно медленные).


1. Вариант простой. Запрашивайте не одну ячейку а весь столбец.
2. Вариант общий Через com попросите exel экспортировать таблицу в csv. после этого все проблемы уйдут работа с csv быстрая и простая.
3. Вариант самый симпатичный. Используйте xlrd, openxls и т.п. Работает без эксела и довольно шустро.

Я наиболее часто встречал такой подход. Как только появляется xlsx его надо сразу автоматически читать и писать нужные вам вещи в базу данных (sqlite,mongo, postgress). Ваше время на работу с xls не расходуется, поскольку долгий процесс импорта идет без вашего участия. Вы получаете быстрый произвольный доступ к данным.

KoVK
попробуйте выставить в False свойства открытого объекта Visible, ScreenUpdating, DisplayAlerts, EnableEvents. Должно ускорить. Но xlrd всяко быстрее
Yuriy_V
KoVK
попробуйте выставить в False свойства открытого объекта Visible, ScreenUpdating, DisplayAlerts, EnableEvents. Должно ускорить. Но xlrd всяко быстрее

xlrd быстрее, секунд 40 в место 50, но всё же не пол секунды как при работе в родном Excel. Скорее всего есть метод который бы мог обратиться к столбцу целиком, но не могу его найти в гугле((
AD0DE412
https://xlrd.readthedocs.io/en/latest/installation.html
ps я правильно понимаю вы из экселя сделали голема и … рулите им из пайтона … хм
сюда смотрели
https://autoit-script.ru/docs/libfunctions/excel%20management.htm
https://github.com/jacexh/pyautoit
мне ближе вариант
doza_and
2. Вариант общий Через com попросите exel экспортировать таблицу в csv. после этого все проблемы уйдут работа с csv быстрая и простая.
вот еще один вроде тоже можно попробывать https://pandas.pydata.org/
KoVK
Yuriy_V
Скорее всего есть метод который бы мог обратиться к столбцу целиком, но не могу его найти в гугле((

метод col_values

Yuriy_V
xlrd быстрее, секунд 40 в место 50, но всё же не пол секунды как при работе в родном Excel

или у вас файл экселя кучерявый, или вы в программе что-то намудрили. Как раз, недавно набивал базу данных на 30 тыс. записей из 6 эксельных файлов с промежуточными вычислениями - несколько минут, не дольше. 22 тыс. ячеек перебираются моментально.
doza_and
Yuriy_V
xlrd быстрее, секунд 40 в место 50
Yuriy_V
содержимое excel ячейки из 22000 строк

Сделал файл 40000 строк
 import xlrd
import time
wb=xlrd.open_workbook("out.xlsx")
sheet=wb.sheet_by_index(0)
t0=time.perf_counter()
dat= sheet.col_values(0)
t1=time.perf_counter()
print(t1-t0)
0.012369728996418417
О каких десятках секунд идет речь? На коме может просесть, но не на читалках. Приведите код, который вы используете.
Yuriy_V
Всем огромное спасибо за подсказки, я воспользовался последним примером от doza_and, сейчас всё просто летает в обработке excel таблицы. Действительно через модуль xlrd реакция на запросы просто мгновенная. Про запросы через COM даже вспоминать теперь не хочется ))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB