Войти
или
Зарегистрироваться
Курсы
Учебник
Учебник 2.0
ОГЭ/ЕГЭ
Олимпиады
Рубрикатор
Компилятор
Статья Автор:
Лебедев Дмитрий
Работа с файлами EXEL помощью модуля openpyxl
Рассмотрим
задание типа 3 КЕГЭ
В задании требуется обработка данных из таблиц файла формата EXCEL. Выполним задание с помощью модуля openpyxl.
Постараемся сделать это достаточно подробно.
Вначале откроем файл и выведем название таблиц/листов
import openpyxl as opx wb = opx.load_workbook('3-5700.xlsx') # Открываем файл print(wb.sheetnames)
×
Выделим листы/таблицы и информацию о них
import openpyxl as opx wb = opx.load_workbook('3-5700.xlsx') # Открываем файл sheets = wb.sheetnames for sheet_name in sheets: sheet = wb[sheet_name] print(sheet.title,sheet.max_row,sheet.max_column)
×
Создадим Dk - словарь Клиентов на базе листа/таблицы Клиенты
Для демнострации создадим полный словарь
import openpyxl as opx wb = opx.load_workbook('3-5700.xlsx') # Открываем файл sheet = wb['Клиенты'] print(sheet.title,sheet.max_row,sheet.max_column) Dk=dict() # словарь для листа Клиенты - ключ = Код клиента, значение = место проживания for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row): # перебор строк таблицы Dk[row[0].value] = (row[1].value,row[2].value,row[3].value,row[4].value) print(len(Dk), Dk[700]) # информационная печать
×
Делаем аналогичные действия для всех листов/таблиц, выделив эти действия в подпрограмму
def fdic(sheet): # формирование словаря из листа/таблицы dd = dict() # словарь для листа. Ключ = содержимое 1-й ячейки, Значение = остальные ячейки for row in sheet.iter_rows(min_row = 2, max_row = sheet.max_row): # перебор строк таблицы dd[row[0].value] = [row[i].value for i in range(1,len(row))] # создание записи в словаре return dd import openpyxl as opx wb = opx.load_workbook('3-5700.xlsx')# Открываем файл Dk = fdic(wb['Клиенты']) # словарь таблицы Клиенты Dn = fdic(wb['Номера']) # словарь таблицы Номера Db = fdic(wb['Бронирование']) # словарь таблицы Бронирование print(1, Dk[1]) # информационная печать print(1580, Dn[1580]) # информационная печать print(97560, Db[97560]) # информационная печать
×
Теперь несложно выполнить задание, но вначале надо определиться с обработкой значений времени.
Самый простой способ - вывести время в формате строки.
Выведем для любой записи и отфильтруем словарь Db (Бронирование) по дате бронирования
def fdic(sheet): dd=dict() # словарь для листа. Ключ = содержимое 1-й ячейки, Значение = остальные ячейки for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row): # перебор строк таблицы dd[row[0].value] = [row[i].value for i in range(1,len(row))] # создание записи в словаре return dd import openpyxl as opx wb = opx.load_workbook('3-5700.xlsx') Db =fdic(wb['Бронирование']) # словарь таблицы Бронирование tm=Db[97560][2] # Дата бронирования из записи словаря print(tm,str(tm)) # информационная печать k=0 for zp in Db: tm=str(Db[zp][2]) # дата бронирования if (tm < '2019-06-01') or (tm > '2019-06-16') : continue k+=1 print('отобрано',k,'записей из', len(Db))
×
Формируем итоговый текст программы
def fdic(sheet): # формирование словаря из листа/таблицы dd = dict() # словарь для листа. Ключ = содержимое 1-й ячейки, Значение = остальные ячейки for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row): # перебор строк таблицы dd[row[0].value] = [row[i].value for i in range(1,len(row))] # создание записи в словаре return dd import openpyxl as opx wb = opx.load_workbook('3-5700.xlsx') # Открываем файл Db = fdic(wb['Бронирование']) # словарь таблицы Бронирование Dn = fdic(wb['Номера']) # словарь таблицы Номера Dk = fdic(wb['Клиенты']) # словарь таблицы Клиенты ans, k = 0, 0 for zp in Db: # перебор записей в таблице Бронирование vzp = Db[zp] # Значения записи из словаря id_kl = vzp[0] # код клиента kl_mp = Dk[id_kl][3] # место проживания Клиента if ('г. Уфа' in kl_mp) == False : continue # отсев по месту проживания Клиента id_n = vzp[1] # код номера n_kg = Dn[id_n][3] # категория Номера n_st = Dn[id_n][2] # суточная стоимость проживания в Номере if n_kg != 5 : continue # отсев по Категории номера tm = str(vzp[2])[:10] # дата бронирования if (tm < '2019-06-01') or (tm > '2019-06-16') : continue # отсев по дате бронирования ans += n_st k += 1 print('Ответ =',ans, '(отобрано',k,'записей из', len(Db),')')
×
Подведем итоги
У модуля openpyxl очень много возможностей по созданию и обработке файлов формате EXCEL, главными из которых являются возможности работы с форматами, стилями и формулами. При решении задания это не использовалось
Модуль openpyxl установить проще, чем Pandas
Модуль openpyxl хорошо подходит для решения несложных заданий с файлами формата EXCEL
# для тренировки
×
Прикрепленные файлы
3-5700.xlsx
Чтобы оставить комментарий нужна авторизация
Печать