Этот Python-скрипт предназначен для автоматической конвертации файлов Microsoft Excel (XLSX) в формат CSV (Comma-Separated Values) и последующей архивации полученных CSV-файлов в формате GZ (Gzip). Скрипт использует библиотеки Pandas для чтения XLSX-файлов и записи CSV-файлов, а также встроенные функции Python для архивации и удаления временных файлов.
Основные функции скрипта:
- convert_xlsx_to_csv(xlsx_file, csv_file): Конвертирует XLSX-файл в CSV-файл с заданными параметрами (разделитель — точка с запятой, кодировка — UTF-8, перевод строки — LF).
- archive_csv(csv_file, archive_file): Архивирует CSV-файл в формат GZ.
- main(xlsx_file): Определяет имена файлов для конвертации и архивации, вызывает функции convert_xlsx_to_csv и archive_csv, а затем удаляет временный CSV-файл.
Когда может быть полезен этот скрипт?
- Автоматизация процесса конвертации XLSX в CSV: Если вам регулярно приходится конвертировать XLSX-файлы в CSV, этот скрипт поможет автоматизировать этот процесс и сэкономить время.
- Архивация CSV-файлов: Архивация CSV-файлов в формат GZ позволяет уменьшить размер файлов и сэкономить место на диске, особенно если вы работаете с большими объемами данных.
- Интеграция в более крупные проекты: Этот скрипт можно интегрировать в более крупные проекты, связанные с обработкой и управлением данными, для автоматической конвертации и архивации файлов.
- Использование в качестве шаблона: Скрипт может служить шаблоном для создания подобных инструментов для конвертации и архивации файлов в других форматах, таких как 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-файлы, находящиеся в текущей директории, а не один конкретный файл, указанный в коде.
Основные изменения в коде:
- Функция main() была изменена, чтобы перебирать все файлы в текущей директории и обрабатывать только те, которые имеют расширение .xlsx.
- Использование os.path.dirname(os.path.abspath(file)) позволяет определить текущую директорию, в которой находится скрипт, и работать с файлами в этой директории.
- Функции convert_xlsx_to_csv и archive_csv были обернуты в блоки try-except для обработки возможных исключений, возникающих при конвертации или архивации файлов. Это позволяет скрипту продолжать работу, даже если возникнет ошибка с одним из файлов.
- Удаление временного CSV-файла также было обернуто в блок try-except для обработки возможных ошибок при удалении файла.
Преимущества модифицированного скрипта:
- Автоматическая обработка всех XLSX-файлов в директории: Скрипт обрабатывает все XLSX-файлы в текущей директории, что позволяет сэкономить время и усилия, если у вас есть несколько файлов, которые нужно конвертировать и архивировать.
- Обработка ошибок: Использование блоков try-except позволяет скрипту обрабатывать возможные ошибки, возникающие при конвертации, архивации или удалении файлов, и продолжать работу с другими файлами.
- Универсальность: Скрипт можно использовать для обработки XLSX-файлов в любой директории, просто поместив его в нужную директорию.
- Возможность расширения: Модифицированный скрипт можно дополнительно расширить, например, добавив функциональность для обработки других типов файлов или для выполнения дополнительных действий с обработанными файлами.
Таким образом, модифицированный скрипт предоставляет более универсальный и гибкий способ конвертации и архивации 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()