python拆分Excel文件

发布于:2024-12-09 ⋅ 阅读:(119) ⋅ 点赞:(0)

按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)