摘要 需求来源于一个会计工作的朋友,说要处理excel表,按照公司名称把相同的公司条目放一个里,将整个大表拆分成多个表,由于数据庞大,手动去拆分很麻烦,就问我能解决么。动手调用pandas库,几行代码就解决了,又考虑到要给别人用,没有python环境,所以决定写出图形界面,打包成exe文件给其他人用。代码并不多,初次使用图形界面,就做一个记录。
需要安装的python库
pip install pandas 用于处理csv文件
pip install pyinstaller 用于打包python文件为exe文件 pyinstaller -F mycript.py
图形界面程序设计
-
UI:各种组件,搭建界面
-
ui_updata:获取用户输入数据和在界面输出数据
-
business:事件处理
源码
import pandas as pd
from tkinter import *
from tkinter.filedialog import *
info = {
'path':'',
'group':'',
'epath':''
}
# ui
def make_app():
app = Tk()
Label(app,text='Excel tool').pack()
e = StringVar() # 字符串钩子,可以用e.get()取输入数据
Entry(app,name = 'entry',textvariable=e ,width=70).pack()
e.set("请先输入分割依据(列名)")
a = StringVar() # 字符串钩子
Entry(app,name = 'epath',textvariable=a ,width=70).pack()
a.set("请输入分割后的文件保存路径例如E:\output\\")
Listbox(app,name='lbox', bg='#f2f2f2').pack(fill=BOTH, expand=True)
Button(app,text='选择文件',command=ui_getdata).pack()
Button(app,text='开始分割',command=part ).pack()
app.geometry('300x400')
return app
# ui_updata
def ui_getdata():
f_name = askopenfilename()
lbox = app.children['lbox']
entry =app.children['entry']
epath = app.children['epath']
info['path'] = f_name
info['group'] = entry.get()
info['epath'] = epath.get()
lbox.insert(END, '文件名:'+f_name.split('/')[-1])
lbox.insert(END, '分割依据(列名):'+entry.get())
lbox.insert(END, '保存路径 :' + epath.get())
# business
def part():
name = info['path']
data = pd.read_csv(name,encoding = 'gb18030')
# print('数据的形状:', data.shape)
# 分组依据,按某列索引名称分组
group_o= data.groupby(by= info['group'])
# 保存各个分组
for name,group in group_o:
group.to_csv(info['epath']+name+'.csv', index=None, encoding='gb18030')
app = make_app()
app.mainloop()
运行结果


