xlsx文件按列筛选拆分成多个文件

这篇博客介绍了一个用Python实现的脚本,该脚本可以按指定列将Excel文件拆分成多个单独的Excel文件。用户可以选择一列进行拆分,程序会根据这一列的值生成相应名称的文件,每个文件包含原始数据中对应列值的所有行。运行结果显示,程序成功按姓名列拆分了输入的Excel文件,并在当前目录下生成了三个单独的Excel文件。
摘要由CSDN通过智能技术生成

目录

1、背景

2、实现

3运行结果

4生成exe可执行文件

5资源下载地址


1、背景

最近有收到一张按列分组筛选后,每项都需要单独生产一个excel文件需求。

例如:input.xlsx

姓名性别学历
张三博士
李四博士后
王五博士后

2、实现

python3实现代码:

# -*- coding:utf-8 -*-
#!/usr/bin/env python

import os
import datetime
import pandas as pd
# cur_dir = r"G:\python\project_comm\mysplit"
cur_dir=os.getcwd()
filename="input.xlsx"
fullfilename = cur_dir + os.sep+ filename
def init():
    nowtime = datetime.datetime.now()
    strnowtime = nowtime.strftime("%Y%m%d%H%M%S")
    # print(strnowtime)
    ifilepath = cur_dir + os.sep + strnowtime
    if not os.path.exists(ifilepath):
        os.makedirs(ifilepath)
    return ifilepath
def HuiZongBiaoGe4(ifilepath):
    if not os.path.exists(fullfilename):
        print('文件[%s]不存在,请确认!'%(fullfilename))
    print('正在读取文件[%s]......\n' %(fullfilename))
    data = pd.read_excel(fullfilename, sheet_name=0, keep_default_na=False)
    # print(data .columns)
    # print(data .columns.values)
    # print(type(data .columns.values))
    cols=data.columns.values
    print("列名称:")
    for i in range(0,len(cols)):
        print(i+1,cols[i])
    prompts=str(r'请选择要拆分的列[1 - '+str(len(cols))+r']: ')
    while True:
        try:
            num = int(input(prompts))
        except ValueError:
            print("Not an integer! Please enter an integer.")
            continue
        else:
            if num<1 or num > len(cols):
                print("Please enter an integer. from 1 to %d" %(len(cols)+1))
                continue
            col_1_name = data.columns[num - 1]
            prompts2=r'开始按列第'+str(num)+r'列:['+str(col_1_name)+r']拆分? (Y/N): '
            yn = input(prompts2)
            if not yn in('Y','y'):
                continue
            break
    col_1_name = data.columns[num-1]
    print('开始按列第%d列:[%s]拆分......' % (num,col_1_name))
    print('保存目录:[%s]' % (cur_dir))
    grp1=data.groupby(col_1_name)
    # print(type(grp1))
    # print(len(grp1))
    i=1
    for name,group in grp1:
        # print(name)
        # print(group)
        # print(type(group))
        name=str(name)
        print('正在拆分[%d-%d][%s][总共%d行]......' % (len(grp1), i, name,len(group)))
        tmppd = pd.DataFrame(group)
        if name !='':
            tmppd.to_excel(cur_dir+os.sep+name+".xlsx")
        else:
            tmppd.to_excel(cur_dir + os.sep + '空值' + ".xlsx")
        i=i+1
    print('按列第%d列:[%s]拆分完成。\n保存目录:[%s]' % (num,col_1_name,cur_dir))
    input('按回车键退出!')


if __name__ == '__main__':
    cur_dir=init()
    HuiZongBiaoGe4(cur_dir)





3运行结果

G:\python\project_comm\venv\Scripts\python.exe G:/python/project_comm/mysplit/mysplit_v6.py
正在读取文件[G:\python\project_comm\mysplit\input.xlsx]......

列名称:
1 姓名
2 性别
3 学历
请选择要拆分的列[1 - 3]: 0
Please enter an integer. from 1 to 4
请选择要拆分的列[1 - 3]: 4
Please enter an integer. from 1 to 4
请选择要拆分的列[1 - 3]: 1
开始按列第1列:[姓名]拆分? (Y/N): y
开始按列第1列:[姓名]拆分......
保存目录:[G:\python\project_comm\mysplit\20221018125746]
正在拆分[3-1][张三][总共1行]......
正在拆分[3-2][李四][总共1行]......
正在拆分[3-3][王五][总共1行]......
按列第1列:[姓名]拆分完成。
保存目录:[G:\python\project_comm\mysplit\20221018125746]
按回车键退出!

Process finished with exit code 0

4生成exe可执行文件

G:\python\project_comm> pyinstaller.exe -F mysplit\mysplit_v6.py
 

5资源下载地址

资源

包括源代码,exe执行文件,测试案例,使用说明

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值