当前位置: 首页 > news >正文

Python在实际工作中的运用-合并XLSX表格的新方法

        继续上篇《Python在实际工作中的运用-合并Excel表格》使用了一段时间后,发现对于行数比较少的表格采用此方法可以非常高效的完成数据合并,但是数据量较大时,如达到单个工作表几十万行时速度就会变慢甚至死机,结合《Python在实际工作中的运用-通用格式CSV文件自动转换XLSX》这篇文章所用到的知识,对多个上十万级别数据进行合并XLSX表格产生了新的思路:可以将sheet工作表逐个导入到SQLite里合并,然后再导出为单个合并后的Excel文件,脚本如下:

本脚本只需要设置好file_path_name参数,运行脚本即可得到合并后的表格

# 待合并表格路径
file_path_name=f"D:\工作簿1.xlsx"

完整代码如下: 

import os
import sqlite3
import time
import warnings
from pathlib import Path
import pandas as pd
from openpyxl import load_workbook

warnings.filterwarnings('ignore')
# 待合并表格路径
file_path_name=f"D:\工作簿1.xlsx"
# 跳过行数(用于跳过不需要的行,请不要跳过标题行,会报错)
skiprows_num = 0

# 获取CSV文件所在目录
file_dirname = os.path.dirname(file_path_name)
# 获取CSV文件名(不带扩展名)
file_name = Path(file_path_name).stem

# 删除重建数据库
dbfile_path_name = f'{file_dirname}/{file_name}.db'
if os.path.exists(dbfile_path_name):
    os.remove(dbfile_path_name)
    # 连接到 SQLite 数据库(如果数据库文件不存在,会自动创建一个新的数据库文件)
    conn = sqlite3.connect(dbfile_path_name)
else:
    conn = sqlite3.connect(dbfile_path_name)

# 记录开始时间
start_time = time.time()
wb = load_workbook(file_path_name)
sheets = wb.sheetnames
# 将Excel表格存入SQLite库中
for i in sheets:
    try:
        df = pd.read_excel(file_path_name, sheet_name=i,engine='openpyxl',skiprows=skiprows_num)
        df.to_sql(f'{file_name}',conn,if_exists='append',index=False)
        print(f'{file_name}的[{i}]完成合并')
    except Exception as e:
        print(f'{file_name}[{i}]报错:{e}')

# 在这里将导入的数据经过SQLite数据库转化为Excel表导出
df = pd.read_sql_query(f'select * from {file_name}',conn)
df.to_excel(f'{file_dirname}/{file_name}_(合并).xlsx',index=False)
# 记录结束时间
end_time = time.time()
print(f'共完成{file_name}的{len(sheets)}个子表的合并,导出路径{file_dirname}\\{file_name}_(合并).xlsx,用时:{end_time-start_time}秒')

相关文章:

  • FPGA AXI-Stream协议详解与仿真实践
  • Python异常处理面试题及参考答案
  • C++ STL(三)list
  • YOLOv12架构深度解析:关键架构特征的细分
  • Python多线程知多少
  • 手机打电话时如何识别对方按下的DTMF按键的字符-安卓AI电话机器人
  • cpp单调栈模板
  • DeepSeek如何辅助学术量化研究
  • 基于coze+微信小程序实现图片上传并利用大模型解析
  • TP-LINK路由器如何设置网段、网关和DHCP服务
  • 左值引用与右值引用详解
  • 第二十八:5.5.【storeToRefs】5.6.【getters】
  • Ultralytics导出的Engine模型直接加载报错
  • DeepSeek 损失函数、奖励函数、训练过程
  • Docker01 - docker快速入门
  • MFC获取所有硬件厂商和序列号
  • JSX 实现列表渲染
  • 为AI聊天工具添加一个知识系统 之125 详细设计之66 智能语义网络
  • DeepSeek赋能智慧港口:点亮全球航运的智慧灯塔,开启智能航运新纪元
  • Vue框架的使用 搭建打包 Vue的安全问题(Xss,源码泄露)
  • 香港今年新股集资额已超600亿港元,暂居全球首位
  • 一女游客在稻城亚丁景区因高反去世,急救两个多小时未能恢复生命体征
  • 解放日报:“感觉全世界人都在上海买买买”
  • 十年牢狱倒计时,一名服刑人员的期待与惶恐
  • 香港特区政府强烈谴责美参议员恐吓国安人员
  • 六省会共建交通枢纽集群,中部离经济“第五极”有多远?