- Работа с таблицами Excel в Python
- Обзор библиотеки Openpyxl
- Обзор библиотеки XLsxWriter
- Считываем данные с Excel документа
- Считать выборочно строки и столбцы
- Запись данных в Excel файл из Python
- Как читать excel-файлы (xlsx) при помощи Python
- Для начала
- sales.xlsx
- Чтение Excel-файла с помощью xlrd
- Чтение Excel-файла с помощью openpyxl
- Чтение Excel-файла с помощью pandas
- Заключение
Работа с таблицами Excel в Python
Очень часто, при парсинге сайтов, нам необходимо сохранить данные в формате Execel, и здесь нам поможет работа с таблицами excel в python.
Для полноценной работы с файлами Excel нам понадобятся библиотеки.
Обзор библиотеки Openpyxl
- Есть возможность чтения EXCEL файлов;
- Два режима чтения файлов:
- Чтение формул;
- Чтение значений формул;
Обзор библиотеки XLsxWriter
- Нет возможности чтения EXCEL файлов;
- Только создание EXCEL файлов;
- Широкие возможности оформления:
- Написание формул;
- Любые цвета и оформление;
- Графики и таблицы;
- Автофильтры и проверка данных;
- Условное форматирование;
- Спарклайны и группировка;
- VBA макросы.
Считываем данные с Excel документа
- Импортировать библиотеку;
- Подключиться к файлу в режиме чтения;
- Подключиться к нужному нам листу;
- Получить нужные нам данные, указав точный адрес ячейки, где находятся наши данные и применив метод value получаем их;
Для того, что бы обратиться к конкретному листу нашего excel документа можем воспользоваться методом worksheets, который возвращает список.
import openpyxl book = openpyxl.open('price.xlsx', read_only=True) sheet = book.active # Открываем активный лист, обычно это первый лист # sheet = book.worksheets[0] # Открываем первый лист print(sheet["A2"].value)
Также, что бы обратится к конкретной ячейке можно использовать индексы, т.е. указав номер строки и номер столбца (обратите внимание, это важно – строки нумеруются с 1, а столбцы с 0):
print(sheet[2][3].value) # 2я строка и 4й столбец
И теперь, когда мы знаем о индексах, мы можем циклом пробежаться по всем рядам, и считать все колонки! Для этого:
- Запускаем цикл for от 1 до max_row, именно этот атрибут нам даст последнюю строку, но функция range() не берет последнее значение, по-этому будет max_row+1;
- И в цикле можем просто прописать индексы столбцов, их обычно не много, не забываем применить метод value
for row in range(2, sheet.max_row+1): # начинаю с 2, так как первый ряд - развания столбцов product = sheet[row][0].value price = sheet[row][1].value discount = sheet[row][2].value rating = sheet[row][3].value print(row, product, price, discount, rating)
Считать выборочно строки и столбцы
Бывают ситуации, когда вам не нужно получать всю информацию, которая есть в файле, а достаточно конкретное количество строки и столбцов, и здесь работа с таблицами excel в python тоже достаточно проста! Рассмотрим 2 варианта, как это можно сделать:
- Создаем переменну ячеек, которые нам нужны;
- Циклом проходим по этим ячейкам, не забывая, что там хранятся кортежи из элементов колонок.
cells = sheet['A2': 'C8'] for product, price, discount in cells: print(product.value, price.value, discount.value)
И второй вариант, если воспользуемся встроенным методом iter_rows(), куда передадим несколько значений:
- Минимальный ряд, который хотим обойти – min_row;
- Максимальный ряд – max_row;
- Минимальную колонку – min_col;
- Максимальную колонку – max_col;
for elem in sheet.iter_rows(min_row=2, max_row=7, min_col=0, max_col=3): print(elem[0].value, elem[1].value, elem[2].value)
Если же в метод iter_rows() ничего не передать, то мы переберем абсолютно весь лист!
А также, мы понимаем, что в переменной цикла elem хранятся ряды с несколькими элементами, т.е. столбцами, следовательно мы их тоже можем обходить циклом:
for elem in sheet.iter_rows(min_row=2, max_row=7, min_col=0, max_col=3): for cell in elem: print(cell.value, end=' ') print()
Запись данных в Excel файл из Python
Для добавления данных в таблицу Excel будем исспользовать ту же библиотеку openpyxl, т.е. нам надо ее импортировать, потом создать рабочую книгу, в которую и будем записывать данные:
import openpyxl book = openpyxl.Workbook() book.save('product.xlsx') # Создастся документ excel
Обратите внимание, что для записи необходимо сначала указать данные, а потом только сохранить файл, не наоборот!
import openpyxl book = openpyxl.Workbook() sheet = book.active # Указываем в какой лист записываем - первый, он же и активный sheet['A1'] = 'Number' # В какую ячейку пишем и что именно пишем sheet['B1'] = 'Name' sheet['C1'] = 'Price' book.save('product.xlsx') # Сохраняем данные в файл book.close() # Закрываем поток
Как читать excel-файлы (xlsx) при помощи Python
.xlsx – это расширение документа Excel, который может хранить большой объем данных в табличной форме. Более того, в электронной таблице Excel можно легко выполнять многие виды арифметических и логических вычислений.
Иногда программистам требуется прочитать данные из документа Excel. В Python для этого есть множество различных библиотек, например, xlrd , openpyxl и pandas . Сегодня мы поговорим о том, как читать excel-файлы (xlsx) при помощи Python, и рассмотрим примеры использования различных библиотек для этих целей.
Для начала
Для проверки примеров этого руководства потребуется какой-нибудь файл Excel с расширением .xlsx , содержащий какие-либо исходные данные. Вы можете использовать любой существующий файл Excel или создать новый. Мы создадим новый файл с именем sales.xlsx со следующими данными:
sales.xlsx
Sales Date Sales Person Amount 12/05/18 Sila Ahmed 60000 06/12/19 Mir Hossain 50000 09/08/20 Sarmin Jahan 45000 07/04/21 Mahmudul Hasan 30000 Этот файл мы и будем читать с помощью различных библиотек Python в следующей части этого руководства.
Чтение Excel-файла с помощью xlrd
Библиотека xlrd не устанавливается вместе с Python по умолчанию, так что ее придется установить. Последняя версия этой библиотеки, к сожалению, не поддерживает Excel-файлы с расширением .xlsx . Поэтому устанавливаем версию 1.2.0. Выполните следующую команду в терминале:
После завершения процесса установки создайте Python-файл, в котором мы будем писать скрипт для чтения файла sales.xlsx с помощью модуля xlrd.
Воспользуемся функцией open_workbook() для открытия файла xlsx для чтения. Этот файл Excel содержит только одну таблицу. Поэтому функция workbook.sheet_by_index() используется в скрипте со значением аргумента 0.
Затем используем вложенный цикл for . С его помощью мы будем перемещаться по ячейкам, перебирая строки и столбцы. Также в скрипте используются две функции range() для определения количества строк и столбцов в таблице.
Для чтения значения отдельной ячейки таблицы на каждой итерации цикла воспользуемся функцией cell_value() . Каждое поле в выводе будет разделено одним пробелом табуляции.
import xlrd # Open the Workbook workbook = xlrd.open_workbook("sales.xlsx") # Open the worksheet worksheet = workbook.sheet_by_index(0) # Iterate the rows and columns for i in range(0, 5): for j in range(0, 3): # Print the cell values with tab space print(worksheet.cell_value(i, j), end='\t') print('')
Запустим наш код и получим следующий результат.
Чтение Excel-файла с помощью openpyxl
Openpyxl – это еще одна библиотека Python для чтения файла .xlsx , и она также не идет по умолчанию вместе со стандартным пакетом Python. Чтобы установить этот модуль, выполните в терминале следующую команду:
После завершения процесса установки можно начинать писать код для чтения файла sales.xlsx.
Как и модуль xlrd, модуль openpyxl имеет функцию load_workbook() для открытия excel-файла для чтения. В качестве значения аргумента этой функции используется файл sales.xlsx.
Объект wookbook.active служит для чтения значений свойств max_row и max_column . Эти свойства используются во вложенных циклах for для чтения содержимого файла sales.xlsx.
Функцию range() используем для чтения строк таблицы, а функцию iter_cols() — для чтения столбцов. Каждое поле в выводе будет разделено двумя пробелами табуляции.
import openpyxl # Define variable to load the wookbook wookbook = openpyxl.load_workbook("sales.xlsx") # Define variable to read the active sheet: worksheet = wookbook.active # Iterate the loop to read the cell values for i in range(0, worksheet.max_row): for col in worksheet.iter_cols(1, worksheet.max_column): print(col[i].value, end="\t\t") print('')
Запустив наш скрипт, получим следующий вывод.
Чтение Excel-файла с помощью pandas
Если вы не пользовались библиотекой pandas ранее, вам необходимо ее установить. Как и остальные рассматриваемые библиотеки, она не поставляется вместе с Python. Выполните следующую команду, чтобы установить pandas из терминала.
После завершения процесса установки создаем файл Python и начинаем писать следующий скрипт для чтения файла sales.xlsx.
В библиотеке pandas есть функция read_excel() , которую можно использовать для чтения .xlsx -файлов. Ею мы и воспользуемся в нашем скрипте для чтения файла sales.xlsx.
Функция DataFrame() используется для чтения содержимого нашего файла и преобразования имеющейся там информации во фрейм данных. После мы сохраняем наш фрейм в переменной с именем data . А дальше выводим то, что лежит в data , в консоль.
import pandas as pd # Load the xlsx file excel_data = pd.read_excel('sales.xlsx') # Read the values of the file in the dataframe data = pd.DataFrame(excel_data, columns=['Sales Date', 'Sales Person', 'Amount']) # Print the content print("The content of the file is:\n", data)
После запуска кода мы получим следующий вывод.
Результат работы этого скрипта отличается от двух предыдущих примеров. В первом столбце печатаются номера строк, начиная с нуля. Значения даты выравниваются по центру. Имена продавцов выровнены по правому краю, а сумма — по левому.
Заключение
Программистам довольно часто приходится работать с файлами .xlsx . Сегодня мы рассмотрели, как читать excel-файлы при помощи Python. Мы разобрали три различных способа с использованием трех библиотек. Все эти библиотеки имеют разные функции и свойства.
Надеемся, теперь у вас не возникнет сложностей с чтением этих файлов в ваших скриптах.