Этот Python-скрипт предназначен для автоматической конвертации файлов Microsoft Excel (XLSX) в формат CSV (Comma-Separated Values) и последующей архивации полученных CSV-файлов в формате GZ (Gzip). Скрипт использует библиотеки Pandas для чтения XLSX-файлов и записи CSV-файлов, а также встроенные функции Python для архивации и удаления временных файлов.

Основные функции скрипта:

  1. convert_xlsx_to_csv(xlsx_file, csv_file): Конвертирует XLSX-файл в CSV-файл с заданными параметрами (разделитель — точка с запятой, кодировка — UTF-8, перевод строки — LF).
  2. archive_csv(csv_file, archive_file): Архивирует CSV-файл в формат GZ.
  3. main(xlsx_file): Определяет имена файлов для конвертации и архивации, вызывает функции convert_xlsx_to_csv и archive_csv, а затем удаляет временный CSV-файл.

Когда может быть полезен этот скрипт?

  1. Автоматизация процесса конвертации XLSX в CSV: Если вам регулярно приходится конвертировать XLSX-файлы в CSV, этот скрипт поможет автоматизировать этот процесс и сэкономить время.
  2. Архивация CSV-файлов: Архивация CSV-файлов в формат GZ позволяет уменьшить размер файлов и сэкономить место на диске, особенно если вы работаете с большими объемами данных.
  3. Интеграция в более крупные проекты: Этот скрипт можно интегрировать в более крупные проекты, связанные с обработкой и управлением данными, для автоматической конвертации и архивации файлов.
  4. Использование в качестве шаблона: Скрипт может служить шаблоном для создания подобных инструментов для конвертации и архивации файлов в других форматах, таких как CSV в JSON, XML в CSV и т.д.

Чтобы использовать скрипт, вам необходимо указать путь к вашему XLSX-файлу в переменной xlsx_file в блоке if name == «main«:. После этого скрипт автоматически сконвертирует XLSX-файл в CSV и заархивирует его в формат GZ.

import pandas as pd
import gzip
import shutil
import os

def convert_xlsx_to_csv(xlsx_file, csv_file):
    # Чтение XLSX файла и сохранение в CSV с заданными параметрами
    df = pd.read_excel(xlsx_file, engine='openpyxl')
    df.to_csv(csv_file, index=False, sep=';', encoding='utf-8', lineterminator='\n')
    print(f'Файл {xlsx_file} успешно конвертирован в {csv_file}')

def archive_csv(csv_file, archive_file):
    # Архивирование CSV файла в GZ
    with open(csv_file, 'rb') as f_in:
        with gzip.open(archive_file, 'wb') as f_out:
            shutil.copyfileobj(f_in, f_out)
    print(f'Файл {csv_file} успешно заархивирован в {archive_file}')

def main(xlsx_file):
    # Определение имен файлов
    csv_file = os.path.splitext(xlsx_file)[0] + '.csv'
    archive_file = csv_file + '.gz'  # Изменено здесь

    # Конвертация и архивирование
    convert_xlsx_to_csv(xlsx_file, csv_file)
    archive_csv(csv_file, archive_file)

    # Удаление временного CSV файла
    os.remove(csv_file)
    print(f'Временный файл {csv_file} удален.')

if __name__ == "__main__":
    xlsx_file = 'llk_july_0708.xlsx'  # Укажите путь к вашему XLSX файлу
    main(xlsx_file)

Модифицированный скрипт для обработки всех XLSX-файлов в директории

Основное отличие модифицированного скрипта от предыдущего заключается в том, что он обрабатывает все XLSX-файлы, находящиеся в текущей директории, а не один конкретный файл, указанный в коде.

Основные изменения в коде:

  1. Функция main() была изменена, чтобы перебирать все файлы в текущей директории и обрабатывать только те, которые имеют расширение .xlsx.
  2. Использование os.path.dirname(os.path.abspath(file)) позволяет определить текущую директорию, в которой находится скрипт, и работать с файлами в этой директории.
  3. Функции convert_xlsx_to_csv и archive_csv были обернуты в блоки try-except для обработки возможных исключений, возникающих при конвертации или архивации файлов. Это позволяет скрипту продолжать работу, даже если возникнет ошибка с одним из файлов.
  4. Удаление временного CSV-файла также было обернуто в блок try-except для обработки возможных ошибок при удалении файла.

Преимущества модифицированного скрипта:

  1. Автоматическая обработка всех XLSX-файлов в директории: Скрипт обрабатывает все XLSX-файлы в текущей директории, что позволяет сэкономить время и усилия, если у вас есть несколько файлов, которые нужно конвертировать и архивировать.
  2. Обработка ошибок: Использование блоков try-except позволяет скрипту обрабатывать возможные ошибки, возникающие при конвертации, архивации или удалении файлов, и продолжать работу с другими файлами.
  3. Универсальность: Скрипт можно использовать для обработки XLSX-файлов в любой директории, просто поместив его в нужную директорию.
  4. Возможность расширения: Модифицированный скрипт можно дополнительно расширить, например, добавив функциональность для обработки других типов файлов или для выполнения дополнительных действий с обработанными файлами.

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

import pandas as pd
import gzip
import shutil
import os

def convert_xlsx_to_csv(xlsx_file, csv_file):
    """Чтение XLSX файла и сохранение в CSV с заданными параметрами."""
    try:
        df = pd.read_excel(xlsx_file, engine='openpyxl')
        df.to_csv(csv_file, index=False, sep=';', encoding='utf-8', lineterminator='\n')
        print(f'Файл {xlsx_file} успешно конвертирован в {csv_file}')
    except Exception as e:
        print(f'Ошибка при конвертации {xlsx_file} в CSV: {e}')

def archive_csv(csv_file, archive_file):
    """Архивирование CSV файла в GZ."""
    try:
        with open(csv_file, 'rb') as f_in:
            with gzip.open(archive_file, 'wb') as f_out:
                shutil.copyfileobj(f_in, f_out)
        print(f'Файл {csv_file} успешно заархивирован в {archive_file}')
    except Exception as e:
        print(f'Ошибка при архивировании {csv_file}: {e}')

def main():
    """Основная функция для обработки всех XLSX файлов в текущей директории."""
    current_dir = os.path.dirname(os.path.abspath(__file__))

    # Перебор файлов в директории
    for filename in os.listdir(current_dir):
        if filename.endswith('.xlsx'):
            xlsx_file = os.path.join(current_dir, filename)

            # Определение имен файлов
            csv_file = os.path.splitext(xlsx_file)[0] + '.csv'
            archive_file = csv_file + '.gz'

            # Конвертация и архивирование
            convert_xlsx_to_csv(xlsx_file, csv_file)
            archive_csv(csv_file, archive_file)

            # Удаление временного CSV файла
            try:
                os.remove(csv_file)
                print(f'Временный файл {csv_file} удален.')
            except Exception as e:
                print(f'Ошибка при удалении временного файла {csv_file}: {e}')

if __name__ == "__main__":
    main()
Специалист в области создания и продвижения сайтов в интернете, обладающий знаниями в веб-разработке и SEO.
Пишите: в Telegram