当前位置: 首页 > 科技观察

太强大了!Python开发桌面小工具,让代码为我们做重复性的工作!_2

时间:2023-03-14 18:25:27 科技观察

决定写这篇文章是因为有朋友问“如何用Python根据数据源自动生成数据透视表”。这道题背后有一个很好的解决办法,让代码为我们做重复的工作,从而减少工作量,减少错误。Python开发的小工具,其实就是把Python程序打包成一个exe,分享后就可以使用了。即使电脑没有Python环境,也可以使用。使用代码提高工作效率,尽量减少加班。内容大纲明确需求:自动生成数据透视表【这部分可以由你的重复工作代替】安装三方依赖库:tkinter和pyinstaller代码实现:包括Python生成数据透视表和桌面GUI两部分联动设计并打包Python程序生成exe。执行文件解决exe文件可能过大的问题:安装虚拟环境1.需求背景工作中的重复操作会使用suppliername,month,三个字段生成想要的pivottable格式和存储量。2、安装三方依赖库创建桌面窗口。这里我们使用tkinter,它是Python自带的一个GUI库。安装后即可使用。pipinstalltkinter使用pyinsatller将程序打包成exe。好处是不需要把代码部署到服务器上,直接把打包好的exe发给对方,就可以直接使用了。对这种小巧轻便的功能非常友好。pip安装pyinstaller3.代码实现Excel文件生成数据透视表和过滤数据,文件名:excel_to_pivot.pyimportpandasaspdimportnumpyasnpclassExcelToPivot(object):def__init__(self,filename,file_path):self.file_name=filenameself.file_path=file_path"""Excel的自动数据透视表函数返回数据透视结果"""defexcel_Pivot(self):print(self.file_path)data=pd.read_excel(self.file_path)data_pivot_table=pd.pivot_table(data,index=['SupplierName','Month'],values=["IncomingAmount"],aggfunc=np.sum)returndata_pivot_table"""按条件筛选并保存"""defselect_data(self,name,month):data_pivot_table=self.excel_Pivot()data_new=data_pivot_table.query('供应商名称==["{}"]&month=={}'.format(name,month))data_new.to_excel('{}.xlsx'.format(str(self.file_name).split('.')[0]))return'筛选完成!'if__name__=='__main__':filename=input("请输入文件名:")path='C:/Users/cherich/Desktop/'+filenamepros=ExcelToPivot(filename,path)print(pross.select_data("C",4))设计桌面窗口函数,文件名:opration.pyfromtkinterimportTk,Entry,Button,mainloopimporttkinter.filedialogimportexcel_to_pivotfromtkinterimportmessageboxfromtkinterimportttkdefUpload():globalfilename,data_pivot_tabletry:filename=tkinter.filedialog.askopenfilename(title='SelectFile')pross=excel_to_pivot.ExcelToPivot(str(filename).split('/')[-1],filename)data_pivot_table=pross.excel_Pivot()messagebox.showinfo('Info','Conversionsucceeded!')除了Exceptionase:print(e)messagebox.showinfo('Info','Conversionfailed!')defselect(name,month):try:print('供应商名称==["{}"]&月份=={}'.format(name,month))data_new=data_pivot_table.query('供应商名称==["{}"]&月份=={}'.format(name,month))data_new.to_excel('{}.xlsx'.format(str(filename).split('.')[0]))messagebox.showinfo('Info','过滤完成并生成文件!')root.destroy()除了Exceptionase:print(e)messagebox.showinfo('Info','Filterfailed!')root=Tk()root.config(background="#6fb765")root.title('Automaticpivottablegadget')root.geometry('500x250')e1=条目(根,宽度=30)e1.grid(行=2,列=0)btn1=按钮(根,文本='上传文件',命令=上传)。网格(行=2,列=10,pady=5)box1=ttk.Combobox(root)#使用grid()控制控件的位置box1.grid(row=5,sticky="NW")#设置下拉菜单中的值box1['value']=('A','B','C','D','Supplier')#通过current()设置下拉菜单选项的默认值box1.current(4)box2=ttk.Combobox(root)box2.grid(row=5,column=1,sticky="NW")box2['value']=(1,2,3,4,5,6,7,8,9,10,11,12,'月')box2.current(12)#写一个回调函数,绑定执行事件deffunc(event):globalb1,b2b1=box1.get()b2=box2.get()#绑定下拉菜单事件box1。bind("<>",func)box2.bind("<>",func)btn2=Button(root,text='过滤数据',command=lambda:select(b1,b2)).grid(row=30,column=10,pady=5)mainloop()如果运行结果如上,说明代码没有问题,可以进行下一步4.打包Python程序生成exe,打开DOS窗口,切换到两个py文件所在的目录,注意路径不要有中文。pyinsatller-F-wopration.pypyinstaller命令常用可选参数:-i为应用程序添加一个图标-F指定打包后只生成一个exe格式的文件-D–onedir创建一个包含exe文件的目录,但是它会依赖很多文件(默认选项)-c–console,–nowindowed使用控制台,无界面(默认)-w–windowed,–noconsole使用窗口,无控制台-p在当前目录下添加搜索路径,会生成两个文件夹:build和dist。dist里面都有可执行的exe文件,把快捷方式发到桌面,点击opration.exe运行,可以把它的快捷方式发到桌面,双击。5.解决exe文件可能过大的问题。部分小伙伴刚刚安装好Python环境,可能不存在文件过大的问题。比如我的电脑安装了很多Python依赖包和anaconda,打包后的文件居然有660M,打包时间很长,执行的时候还是卡住了。后来整改后缩小到31M,打包速度很快,秒级执行。解决方法是在Windows系统下安装Python虚拟环境,前提是电脑上已经安装了Python,才能进行下面的操作。找到Python所在的路径。如果忘记了,可以在电脑左下角搜索【编辑系统环境变量】-【用户变量】-【PATH】找到配置虚拟环境。虚拟环境可以理解为Python解释器的一个副本。在此环境中,您可以安装私有包,而不会影响系统上安装的全局Python解释器。虚拟环境对于避免系统的Python解释器中的包混乱和版本冲突非常有用。重要的是不同的虚拟环境可以构建不同的Python版本,创建时选择。我们这里需要一个比较“干净”的Python环境,不需要安装太多的依赖包,也避免了exe包文件体积过大,所以使用了虚拟环境。安装虚拟环境依赖包pipinstallvirtualenvpipinstallvirtualenvwrapper-win创建虚拟环境命令mkvirtualenv-p="C:\Users\cherich\AppData\Local\Programs\Python\Python38\python.exe"py38进入虚拟环境,你可以看到只有几个默认的Python库。这时可以测试一下代码,看看是否缺少相关的依赖。例如,我缺少Pandas和openpyxl。你可以根据pipinstall的包名依次安装。非常重要:必须在更新文件之前重新安装pyinstaller。缩小。以上操作完成后,打包就可以了,最后退出虚拟环境。退出虚拟环境deactivate