Python+Pandas实现批量合并Excel文件

import pandas as pd
from tkinter import filedialog, Tk
import time
import math
import os

root = Tk()  # 创建一个Tkinter.Tk()实例
files_dir = filedialog.askdirectory(initialdir='D:\\', title="请选择要批处理的文件夹")
root.destroy()  # 将Tkinter.Tk()实例销毁

# 开始计时
time_start = time.time()

# 找到所有文件及文件夹名称,可能包含非excel文件或目录,置入列表list_filenames_all[]
list_filenames_all = os.listdir(files_dir)

# 将仅包含xlsx的文件名称置入列表list_filenames_xlsx[]
list_filenames_xlsx = []
for filesname in list_filenames_all:
    if ".xlsx" in filesname:
        list_filenames_xlsx.append(filesname)

print('--------------------------------------------------------------------------------')
print(f'“{files_dir}/”文件夹下,共有Excel文件{len(list_filenames_xlsx)}个,具体如下:')
print('--------------------------------------------------------------------------------')
for filenames_xlsx in list_filenames_xlsx:
    print(filenames_xlsx)
print('--------------------------------------------------------------------------------')

# 获取文件大小,将文件的累计大小存入list_filesize列表,之所以用累计大小,是为了统计进度。
totalsize = 0
list_filesize = []
for filenames_xlsx in list_filenames_xlsx:
    stat_info = os.stat(files_dir + "/" + filenames_xlsx)
    totalsize = totalsize + stat_info.st_size
    list_filesize.append(totalsize)
print(
    f'文件总体大小:{round(totalsize / 1024 / 1024, 2)}MB,预计处理时间约{round(totalsize / 1024 / 1024 * 3.5 / 60, 0)}分钟')
print('--------------------------------------------------------------------------------')
print('合并进行中,请稍候……')

# 创建一个新目录存放 excel 文件
output_dir = files_dir + '/合并excel'
output_path = output_dir + '/' + "批量合并.xlsx"  # 构造绝对路径
if not os.path.exists(output_dir):  # 如果目录不存在就创建
    os.makedirs(output_dir)

df_merge = pd.DataFrame()
for i in range(0, len(list_filenames_xlsx)):
    df = pd.read_excel(files_dir + '/' + list_filenames_xlsx[i])  # 打开文件
    df_merge = pd.concat([df_merge, df])  # 将df合并至df_merge
    print(f'合并完成:{list_filenames_xlsx[i]}')
print('--------------------------------------------------------------------------------')
print(f'正在写入数据……')
writer = pd.ExcelWriter(output_path)
df_merge.to_excel(writer, sheet_name='Sheet1', startrow=0, index=False, header=True, encoding="utf-8")
print(f'正在保存表格……')
writer.save()

# 计时结束
time_end = time.time()
if (time_end - time_start) < 60:
    seconds = round((time_end - time_start), 0)
    minuits = 0
seconds = round((time_end - time_start) % 60, 0)
minuits = math.floor((time_end - time_start) / 60)
print('--------------------------------------------------------------------------------')
print(f'导出完成!!导出目录至{output_dir}/')
print(f'实际运行时间:{minuits}分 {seconds} 秒')
print('--------------------------------------------------------------------------------')
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值