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

python拆分Excel文件

按Sheet拆分Excel 或 按照某一列的不同值拆分Excel。文档样式如下:
在这里插入图片描述
结果:红色是按照Sheet名拆出的,蓝色和橙色是某个Sheet按照某列的不同值拆分的。
在这里插入图片描述

代码:

# -*- coding: utf-8 -*-
"""
拆分excel文件——按照sheet个数拆分 或者 按照列值拆分
"""

import pandas as pd 
import os


def split_excel_by_sheet(file_path1):

    # 获取文件名称
    file_name = os.path.basename(file_path1)
    # 获取文件大小
    file_size = os.path.getsize(file_path1)
    # 文件名和扩展类型分别获取
    file_name_1, file_extension = os.path.splitext(os.path.basename(file_path1))
    # 获取excel的sheet名
    org_excel = pd.ExcelFile(file_path1)
    
    print('文件全称:', file_name,';大小: ',file_size ,'字节')
    print('文件名称:', file_name_1, ';文件类型:', file_extension)
    print('所含sheet', org_excel.sheet_names)
    
    # 按照sheet拆分
    # 遍历sheet
    for sheet_name in org_excel.sheet_names:
        # 读取每个sheet后,单独保存
        df = pd.read_excel(org_excel, sheet_name) # dtype='str' 可以避免过长的数值被转为科学计数法
        # 在当前路径下,使用原文件名和sheet名 重新命名新文件
        df.to_excel('.\\' + file_name_1 + '_' + sheet_name + '.xlsx', index=None)
    print('split_excel_by_sheet is OK')
    


def split_excel_by_part(file_path1):
    
    # 获取文件名称
    file_name = os.path.basename(file_path1)
    # 获取文件大小
    file_size = os.path.getsize(file_path1)
    # 文件名和扩展类型分别获取
    file_name_1, file_extension = os.path.splitext(os.path.basename(file_path1))
    # 获取excel的sheet名
    org_excel = pd.ExcelFile(file_path1)
    
    print('文件全称:', file_name,';大小: ',file_size ,'字节')
    print('文件名称:', file_name_1, ';文件类型:', file_extension)
    print('所含sheet', org_excel.sheet_names)
    
    
    sheet_name = input("请输入要拆分的sheet名:")
    
    # 检测sheet名称
    if sheet_name in org_excel.sheet_names:
        
        print('将拆分', file_name,'的', sheet_name, '内容')
        # 读取sheet_name内容
        df1 = pd.read_excel(file_path1, sheet_name)
        # 获取其列名
        print('包含的列为' , df1.columns.tolist())
        
        by_column_name = input("请输入要根据哪个列拆分:")
        
        # 检测列名称
        if by_column_name in df1.columns.tolist():
            print('按照',by_column_name,'列拆分,提示:')
            # 查看by_column_name列的内容值
            by_column_name_values = df1[by_column_name].unique()
            print(by_column_name,'列中值包含',by_column_name_values,'。同一值单独拆分成一个文件')
            
            # 使用groupby方法根据'lesson'的值拆分DataFrame
            grouped = df1.groupby(by_column_name)
            # 现在grouped是一个GroupBy对象,可以迭代它来访问每个组
            for key, group in grouped:
                print(f"Group with key: {key}")
                print(group)
                
                # 按照lesson列的不同值单独存一个文件
                group.to_excel('.\\' + file_name_1 + '_' + sheet_name + '_' + key +'.xlsx', index=None)
            print('Finish!')
            
        else :
            print('输入的',by_column_name,'?!没有叫这个名的列!')
        
    else :
        print('输入的',sheet_name,',此sheet名称不存在!')
        




if __name__ == '__main__':
    
    # 文件地址
    file_path1 = '.\excel数据拆分.xlsx'

    # 按照sheet拆
    # split_excel_by_sheet(file_path1) # 按照sheet进行拆分
    
    # 按照部分分
    split_excel_by_part(file_path1)
    
    
    
    
    

http://www.kler.cn/a/428188.html

相关文章:

  • Win11下帝国时代2无法启动解决方法
  • 基于Flask的旅游系统的设计与实现
  • 使用Ollama本地部署DeepSeek R1
  • React Router v6配置路由守卫
  • ios swift画中画技术尝试
  • 如何获取小程序的code在uniapp开发中
  • docker安装ddns-go(外网连接局域网)
  • JVM 参数配置详细介绍
  • C++ Learning 函数重载•引用
  • PyTorch基本使用——张量的索引操作
  • opencv光流法推测物体的运动
  • Spring Boot日志:从Logger到@Slf4j的探秘
  • ChatGPT 最新推出的 Pro 订阅计划,具备哪些能力 ?
  • uniapp 微信小程序webview 和 h5数据通信
  • 【AWS re:Invent 2024】一文了解EKS新功能:Amazon EKS Auto Mode
  • Python实现BBS论坛自动签到【steamtools论坛】
  • Python 入门教程(2)搭建环境 | 2.4、VSCode配置Node.js运行环境
  • 如何利用DBeaver配置连接MongoDB和人大金仓数据库
  • django 实战(python 3.x/django 3/sqlite)
  • AI by Hand:手搓 AI 模型
  • git遇见冲突怎么解决?
  • Dell电脑安装Centos7问题处理
  • Python Virtualenv 虚拟环境迁移, 换新电脑后 Python 环境快速迁移 Virtualenv 环境配置管理,实测篇
  • 黑马程序员Java项目实战《苍穹外卖》Day12
  • 十六、大数据之Shell 编程
  • 第四十一天 ASP应用 HTTP.sys 漏洞 iis6文件解析漏洞和短文件漏洞 access数据库泄露漏洞