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