Как ускорить обработку Excel через Python? Какой модуль выбрать?
Задача 1: На входе будет 10+
Excel
-файлов с 1000+
строк в каждом файле. Программа будет находить необходимую информацию в каждом файле и создавать на основе этой информации другой файл. Другой файл будет содержать сразу все строки из тех 10
-ти файлов.
Через какой модуль реализовать быстрее? Сделал через openpyxl
- 700
строк отфильтровались и скопировались за 10
минут. Это долго. Что можно, сделать, чтобы ускорить? Если можно, без применения асинхронности.
Задача 2: В тех же файлах есть строки с неявными ссылками (у ссылки есть заголовок). Как скопировать эти ссылки в другой файл? Через тот же openpyxl
не смог это сделать. Копирует только заголовок ссылки, а саму ссылку - нет.
import openpyxl
from openpyxl import Workbook
poster_book = openpyxl.open('poster.xlsx', read_only=True)
poster_sheet = poster_book.active
for prop in poster_book.custom_doc_props.props:
print(f'{prop.name}:{prop.value}')
MI_book = Workbook()
MI_sheet = MI_book.active
poster_titles = {*заголовки словаря удалены по соображениям конфиденциальности*
}
def write_titles_in_file():
row = []
for k, v in poster_titles.items():
row.append(k)
MI_sheet.append(row)
def get_title_links():
poster_title_links = poster_titles.copy()
for row_num in range(1, poster_sheet.max_row+1):
row = poster_sheet[row_num]
for cell in row:
for k, v in poster_titles.items():
if v and cell.value and v in str(cell.value):
poster_title_links[k] = (cell.row, cell.column)
return poster_title_links
def get_data():
write_titles_in_file()
poster_data_row = poster_titles.copy()
for row_num in range(1, poster_sheet.max_row+1):
for k, v in poster_title_links.items():
if v and int(v[0]) < row_num:
cell = poster_sheet[row_num][int(v[1])-1]
poster_data_row[k] = cell.value
if poster_data_row['адрес'] != poster_titles['адрес']:
write_in_file(poster_data_row)
print(poster_data_row)
def write_in_file(poster_data_row):
row = []
for k, v in poster_data_row.items():
row.append(v)
MI_sheet.append(row)
poster_title_links = get_title_links()
get_data()
MI_book.save('MI_OOH.xlsx')