Создание и обработка Excel файлов с использованием Python

от автора

Всем привет! Работа с Excel файлами — одна из частых задач, встречающихся в повседневной разработке. В этой статье рассмотрим, как с помощью Python можно создавать, заполнять, и стилизовать Excel файлы. Для этого мы будем использовать библиотеки pandas, openpyxl и faker (для тестов).

Для начала установим библиотеки:

pip install pandas xlsxwriter openpyxl faker

Создание Пустого Excel Файла

Начнем с создания пустого Excel файла с заданными колонками. Для этого мы используем pandas и xlsxwriter.

import os import pandas as pd   def create_empty_excel(columns: list, filename: str, sheet_name: str = 'Sheet1'):     df = pd.DataFrame(columns=columns)      if not os.path.exists('excel_files'):         os.makedirs('excel_files')      filepath = os.path.join('excel_files', filename)     excel_writer = pd.ExcelWriter(filepath, engine='xlsxwriter')     df.to_excel(excel_writer, index=False, sheet_name=sheet_name, freeze_panes=(1, 0))     excel_writer._save()      return filepath 

Этот код создает пустой Excel файл с указанными колонками и сохраняет его в папку excel_files. Если папка не существовала в корневой дирректории, то она будет создана.

Обратите внимание на то, что я закрепил верхнюю строку. Как по мне — это удобно.

В функции видим запись engine='xlsxwriter', это означает, что используется XlsxWriter в качестве движка для записи данных в файл Excel.

Тестируем

def create_tabel_users():     filepath = create_empty_excel(columns=['Имя', 'Адрес', 'Email', 'Телефон'],                                   filename='users.xlsx')   create_tabel_users()
Файл создан. Для просмотра я воспользовался Professional версией Pycharm

Файл создан. Для просмотра я воспользовался Professional версией Pycharm

Парсинг Excel Файла в Список Словарей

После создания Excel файла, возможно, потребуется считать данные из него и преобразовать в удобный для обработки формат — список словарей.

def parse_excel_to_dict_list(filepath: str, sheet_name='Sheet1'):     # Загружаем Excel файл в DataFrame     df = pd.read_excel(filepath, sheet_name=sheet_name)      # Преобразуем DataFrame в список словарей     dict_list = df.to_dict(orient='records')      return dict_list

Этот простой метод загружает данные из Excel файла в DataFrame, а затем преобразует их в список словарей.

Сейчас я добавлю некоторые данные в созданную ранее эксель таблицу и воспользуюсь данной функцией.

Так выглядит моя таблица в обычном виде:

Код:

def get_data_to_exel():     info = parse_excel_to_dict_list('users.xlsx')     for i in info:         print(i)   get_data_to_exel()

Смотрим:

Создание Excel Файла из Списка Словарей

Теперь создадим Excel файл из списка словарей и применим стилизацию для улучшения внешнего вида.

def create_excel_from_dict_list(dict_list: list, output_filename: str, sheet_name='Sheet1'):     # Создаем директорию, если она не существует     if not os.path.exists('excel_files'):         os.makedirs('excel_files')      filepath = os.path.join('excel_files', output_filename)      # Создаем новую книгу Excel     wb = Workbook()     ws = wb.active     ws.title = sheet_name      # Записываем данные из списка словарей в Excel     if dict_list:         header = list(dict_list[0].keys())         ws.append(header)  # Записываем заголовки          for row in dict_list:             ws.append([row[col] for col in header])      # Настраиваем стили для красивого вида     header_style = NamedStyle(name='header')     header_style.font = Font(bold=True, color='FFFFFF')     header_style.alignment = Alignment(horizontal='center', vertical='center')     header_style.fill = PatternFill(start_color='4F81BD', end_color='4F81BD', fill_type='solid')     border_style = Border(         left=Side(border_style='thin', color='000000'),         right=Side(border_style='thin', color='000000'),         top=Side(border_style='thin', color='000000'),         bottom=Side(border_style='thin', color='000000')     )     header_style.border = border_style      cell_style = NamedStyle(name='cell')     cell_style.alignment = Alignment(horizontal='left', vertical='center')     cell_style.border = border_style      for cell in ws[1]:  # Применяем стиль к заголовкам         cell.style = header_style      for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=1, max_col=ws.max_column):         for cell in row:             cell.style = cell_style      # Автоматическое изменение ширины столбцов     for col in ws.columns:         max_length = 0         column = col[0].column_letter         for cell in col:             try:                 if len(str(cell.value)) > max_length:                     max_length = len(cell.value)             except:                 pass         adjusted_width = (max_length + 2)         ws.column_dimensions[column].width = adjusted_width      # Сохраняем файл     wb.save(filepath)     return filepath

Этот код создает Excel файл из списка словарей и применяет стили для заголовков и ячеек.

Генерация тестовых данных

Для тестирования наших функций можно использовать библиотеку faker, которая позволяет генерировать фейковые данные.

from faker import Faker   def generate_fake_user():     fake = Faker('ru_RU')      return {         'name': fake.name(),         'address': fake.address(),         'email': fake.email(),         'phone_number': fake.phone_number(),         'birth_date': fake.date_of_birth(),         'company': fake.company(),         'job': fake.job()     }   def get_fake_users(count: int):     return [generate_fake_user() for _ in range(count)]    

Функция get_fake_users генерируют фейковые данные русских пользователей в том количестве, которое вы передадите, что позволяет протестировать создание и обработку Excel файлов.

Пример использования

Теперь объединим все части кода и создадим полный рабочий пример:

def main():     # создадим 100 фейковых пользователей     fake_users = get_fake_users(100)      # создадим таблицу с пользователями     create_excel_from_dict_list(fake_users, 'fake_users.xlsx')      # получим путь к таблице с пользователями     filepath = os.path.join('excel_files', 'fake_users.xlsx')      # получим всех пользователей из таблицы     all_users = parse_excel_to_dict_list(filepath)     for i in all_users:         print(i)   main()

Как вы увидели, тут мы создали 100 фейковых пользователей и поместили их в таблицу с именем ‘fake_users.xlsx’. Затем мы вывели в консоль все данные о пользователях в виде списка питоновских словарей (через цикл for).

Сама таблицв:

Заключение

Используя Python и библиотеки pandas, openpyxl и faker, можно легко создавать, заполнять, и стилизовать Excel файлы для различных нужд. Надеюсь, эта статья поможет вам лучше понять, как работать с Excel файлами в Python и вдохновит на создание собственных проектов.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Хотите статью про работу с GoogleSheets через Python?

77.42% Конечно!24
22.58% Нет.7

Проголосовал 31 пользователь. Воздержавшихся нет.

ссылка на оригинал статьи https://habr.com/ru/articles/824050/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *