Время прочтения: 2 мин.

Не смотря на широко развивающуюся автоматизацию, еще приходится сталкиваться с отсутствием баз данных. Например, некоторые отчеты сохраняются в отдельных файлах Excel в разрезе каждого дня, причем в каждом файле содержатся множество листов с названиями городов. Естественно для анализа информации нам понадобится объединение информации в сводный отчет, причем с сохранением названий городов. Эту задачу помог нам решить Pandas совместно с библиотекой os, при условии одинаковой структуры отчетов и названия листов в файлах. Рассмотрим программу пошагово.

Шаг 1.

Импортируем необходимые библиотеки.

import pandas as pd
from os import listdir
import os

Шаг 2.

Создадим список, в котором перечислим все необходимые наименования листов,

и пустой объект Dataframe (далее – DF), который будет собирать в себе все отчеты, которые необходимо объединить.

_list = {'Хаб','СовГ','КнаА','Бир','Вл','Нах',
         'Усс','ДалР','Спасск','Арс','ДалГ',
         'Благ','Св','Бел','Рай','Зея',
         'ЮС','Маг','Кам'}

Шаг 3.

Используя цикл «for» каждый Excel-файл в указанной директории (в нашем случае рабочая директория совпадает с директорией, в которой расположен скрипт) импортируется его при помощи метода «read_excel()» в объект DF. После чего, используя метод «append()», добавляем импортированный DF в DF, созданный в Шаге 2. По итогу мы получаем объект DF, содержащий в себе данные всех исходных файлов в директории.

for city in _list:
    print(city)

    fileList = listdir(os.getcwd())
    for file in fileList:
        if file[0] != '~' and file[-4:] == 'xlsx':
            print(file)
            try:
                fileData = pd.read_excel(
                    file,
                    sheetname=city,
                )
                fileData['city'] = city
                data = data.append(fileData, ignore_index=True)
            except:
                print('ERROR^', city, file)

Шаг 4. Используя метод «to_excel()» экспортируем данные из объединенного DF в файл Excel.

data.to_excel('result\\result.xlsx', index=False)
print('end')

Задача выполнена.