Как читать из csv и генерировать файл excel с тем же именем на Python

Вопрос или проблема

В настоящее время я читаю SQL-запросы из столбца в CSV-файле, выполняю их в Snowflake и затем генерирую результат SQL-запроса в отдельном Excel-файле для каждого запроса. Код работает нормально.

введите описание изображения здесь

Excel-файлы создаются с именами файлов как result_1.xlsx, result_2.xlsx. Но теперь я хочу создать Excel-файл с именем файла, указанным во втором столбце CSV-файла. Например, результат первого запроса должен быть сохранен как test1.xlsx, результат второго запроса должен быть сохранен как test2.xlsx. Имя файла Excel должно считываться из второго столбца CSV-файла.

введите описание изображения здесь

Ниже представлен мой код на Python:

# Чтение запросов из CSV-файла с кодировкой UTF-8, чтобы удалить BOM
with open(csv_file_path, mode="r", encoding='utf-8-sig') as file:
    reader = csv.reader(file)
    queries = [row[0] for row in reader if row]  # Пропустить пустые строки

# Выполнение каждого запроса и сохранение результатов в отдельные Excel-файлы
for i, query in enumerate(queries):
    try:
        # Выполнение запроса с использованием движка SQLAlchemy
        df = pd.read_sql(query, engine)
       
        # Определение имени выходного Excel-файла
        output_file = os.path.join(output_directory, f'result_{i + 1}.xlsx')
       
        # Сохранение DataFrame в Excel-файл
        df.to_excel(output_file, index=False)
        print(f'Сохранены результаты запроса {i + 1} в {output_file}')
       
    except Exception as e:
        print(f"Ошибка выполнения запроса {i + 1}: {e}")

Ответ или решение

Чтобы добиться сохранения результатов SQL-запросов в файлы Excel с именами, указанными во втором столбце CSV-файла, необходимо внести определенные изменения в существующий код. Этот код будет считывать оба столбца: первый из них будет содержать сам SQL-запрос, а второй — имя для выходного файла. В данном ответе приведен подробный пример реализации данной задачи на Python с использованием библиотеки Pandas для обработки данных и SQLAlchemy для работы с базой данных.

Шаг 1: Подготовка

Убедитесь, что у вас установлены необходимые библиотеки. Если они еще не установлены, выполните следующие команды:

pip install pandas sqlalchemy openpyxl

Шаг 2: Написание кода

Ниже приведен измененный код, который выполнит ваши требования:

import csv
import os
import pandas as pd
from sqlalchemy import create_engine

# Параметры подключения к базе данных Snowflake
connection_string = 'your_connection_string'
engine = create_engine(connection_string)

# Путь к CSV файлу и директории для сохранения Excel файлов
csv_file_path = 'queries.csv'
output_directory = 'output_directory'

# Убедитесь, что директория для выходных файлов существует
os.makedirs(output_directory, exist_ok=True)

# Чтение SQL запросов и названий файлов из CSV
with open(csv_file_path, mode="r", encoding='utf-8-sig') as file:
    reader = csv.reader(file)
    next(reader)  # Пропускаем заголовки, если они есть
    queries_and_names = [row for row in reader if row]  # Считываем все непустые строки

# Выполнение каждого запроса и сохранение результатов в Excel файлы
for query, file_name in queries_and_names:
    try:
        # Выполняем запрос с использованием SQLAlchemy
        df = pd.read_sql(query, engine)

        # Определяем имя выходного Excel файла
        output_file = os.path.join(output_directory, f'{file_name}.xlsx')

        # Сохраняем DataFrame в Excel файл
        df.to_excel(output_file, index=False)
        print(f'Результаты запроса сохранены в файл: {output_file}')

    except Exception as e:
        print(f"Ошибка выполнения запроса: {e}")

Шаг 3: Объяснение кодирования

  1. Импорт библиотек: мы импортируем необходимые модули, включая pandas для работы с данными и sqlalchemy для подключения к базе данных.

  2. Параметры подключения: укажите строку подключения к вашей базе данных Snowflake.

  3. Чтение CSV файла: мы открываем CSV-файл и считываем его содержимое. Мы пропускаем заголовки (если они присутствуют) и формируем список пар (query, file_name).

  4. Выполнение запросов: в цикле мы выполняем каждый SQL-запрос и сохраняем результат в файл с именем из второго столбца CSV-файла. Мы обрабатываем потенциальные ошибки.

  5. Сохранение результатов: результаты запроса сохраняются в формате Excel с указанием имени файла.

Заключение

С помощью вышеизложенного кода вы сможете извлекать данные из SQL-запросов и сохранять результаты в файлы Excel с заданными именами. Это значительно упростит управление выходными данными, сделает их более понятными и удобными в использовании.

Не забывайте тестировать ваш код на различных сценариях и корректировать его при необходимости. Успехов в программировании!

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

Капча загружается...