目录
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执行文件,测试案例,使用说明