Анализ данных, Обработка документов

Объединение файлов с помощью Python

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

На первом шаге пройдемся по нашей папке (очень важно, чтобы все файлы, которые необходимо объединить, находились в одной папке) и запишем в список название файлов + путь. Это можно сделать с помощью 2 библиотек: os или glob.

  1. Библиотека os.
import pandas as pd
import os

my_list=[]
for root, dirs, files in os.walk('ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\***.xlsx'):
    my_list.extend([os.path.join(root,file) for file in files if file.endswith('xlsx')])

print(my_list)
['ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file.xlsx',
 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file2.xlsx',
 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file3.xlsx',
 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file4.xlsx',
 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file5.xlsx',
 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file6.xlsx']

Важно! При указании пути до папки ставить «\\».

file.endswith(`***`) используется для поиска, в круглых скобках можно указать любое расширение xlsx, xls, csv и т.д.

  1. Библиотека glob.
import glob
my_list=[]
my_list.extend(glob.glob('ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\***.xlsx')

print(my_list)

['ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file.xlsx',
 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file2.xlsx',
 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file3.xlsx',
 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file4.xlsx',
 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file5.xlsx',
 'ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\file6.xlsx']

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

Переходим к шагу 2.

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

result=pd.DataFrame()

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

for file in my_list: 
    df = pd.read_excel(file) 
    result=result.append(df)

Если же ваши выгрузки содержат информацию, на нескольких листах, то добавляем еще один цикл.

for file in my_list:
    f = pd.ExcelFile(file)
    for sheet in f.sheet_names: 
        df = pd.read_excel((file),sheet_name=sheet) 
        result=result.append(df)

pd.ExcelFile(file) позволяет собрать информацию о листах.

Шаг 3 и завершающий.

Сохраняем получившийся DataFrame в excel или же csv.

result.to_excel('result.csv')
result.to_csv('result.csv', sep = ';', encoding = 'cp1251')

Программа готова.

import pandas as pd
import os
import glob

#1 вариант
my_list=[]
for root, dirs, files in os.walk('ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\***.xlsx'):
    my_list.extend([os.path.join(root,file) for file in files if file.endswith('xlsx')])

#2 вариант
my_list=[]
my_list.extend(glob.glob('ДИСК:\\Папка1\\Папка2\\***\\ПапкаN\\***.xlsx')
               
result=pd.DataFrame()

for file in my_list:
    f = pd.ExcelFile(file)
    for sheet in f.sheet_names: 
        df = pd.read_excel((file),sheet_name=sheet) 
        result=result.append(df)
               
result.to_excel('result.csv')
result.to_csv('result.csv', sep = ';', encoding = 'cp1251')  

А как вы объединяете файлы? Делитесь опытом в комментариях.

Советуем почитать