Python 开发桌面小工具,让代码替我们干重复的工作!
作者:Cherish
來源:https://www.jianshu.com/p/91128d442198
本文為讀者投稿
決定寫這篇文章的初衷是來源于一位小伙伴的問題,關(guān)于"如何根據(jù)數(shù)據(jù)源用 Python 自動(dòng)生成透視表",這個(gè)問題背后有個(gè)非常好的解決思路,讓代碼替我們做重復(fù)的工作,從而減輕工作量,減少出錯(cuò)。
Python 開發(fā)的小工具實(shí)際上是將 Python 程序打包成 exe,分享即可用,即便電腦沒有安裝 Python 環(huán)境,也可以使用,用代碼提高工作效率,盡量少加班。
內(nèi)容大綱
明確需求:自動(dòng)生成透視表【這部分可以換成你的重復(fù)性工作】
安裝三方依賴庫:tkinter 和 pyinstaller
代碼實(shí)現(xiàn):包括兩部分 Python 生成透視表和桌面 GUI 聯(lián)動(dòng)設(shè)計(jì)
打包 Python 程序 生成 exe 可執(zhí)行文件
解決 exe 文件可能過大問題:安裝虛擬環(huán)境
一、需求背景
將工作中重復(fù)性的操作,利用供應(yīng)商名稱,月份,入庫金額三個(gè)字段來生成想要的透視表格式。
二、安裝三方依賴庫
創(chuàng)建桌面窗口,這里使用 tkinter,它是 Python 自帶的 GUI 庫,安裝后即可使用。
pip?install?tkinter使用 pyinsatller 將程序打包成 exe,好處是不需要將代碼部署到服務(wù)器,直接將打包好的 exe 發(fā)給對(duì)方,就能直接使用,對(duì)于這種小而輕的功能非常友好。
pip?install?pyinstaller三、代碼實(shí)現(xiàn)
Excel 文件生成透視表和篩選數(shù)據(jù),文件名:excel_to_pivot.py
import?pandas?as?pd import?numpy?as?npclass?ExcelToPivot(object):def?__init__(self,?filename,?file_path):self.file_name?=?filenameself.file_path?=?file_path"""excel自動(dòng)轉(zhuǎn)透視表功能返回透視結(jié)果"""def?excel_Pivot(self):print(self.file_path)data?=?pd.read_excel(self.file_path)data_pivot_table?=?pd.pivot_table(data,?index=['供應(yīng)商名稱',?'月份'],?values=["入庫金額"],?aggfunc=np.sum)return?data_pivot_table"""按條件篩選,并保存"""def?select_data(self,?name,?month):data_pivot_table?=?self.excel_Pivot()data_new?=?data_pivot_table.query('供應(yīng)商名稱?==?["{}"]?&?月份?==?{}'.format(name,?month))data_new.to_excel('{}.xlsx'.format(str(self.file_name).split('.')[0]))return?'篩選完成!'if?__name__?==?'__main__':filename?=?input("請(qǐng)輸入文件名字:")path?=?'C:/Users/cherich/Desktop/'?+?filenamepross?=?ExcelToPivot(filename,?path)print(pross.select_data("C",?4))設(shè)計(jì)桌面窗口功能,文件名:opration.py
from?tkinter?import?Tk,?Entry,?Button,?mainloop import?tkinter.filedialog import?excel_to_pivot from?tkinter?import?messagebox from?tkinter?import?ttkdef?Upload():global?filename,?data_pivot_tabletry:filename?=?tkinter.filedialog.askopenfilename(title='選擇文件')pross?=?excel_to_pivot.ExcelToPivot(str(filename).split('/')[-1],?filename)data_pivot_table?=?pross.excel_Pivot()messagebox.showinfo('Info',?'轉(zhuǎn)換成功!')except?Exception?as?e:print(e)messagebox.showinfo('Info',?'轉(zhuǎn)換失敗!')def?select(name,?month):try:print('供應(yīng)商名稱?==?["{}"]?&?月份?==?{}'.format(name,?month))data_new?=?data_pivot_table.query('供應(yīng)商名稱?==?["{}"]?&?月份?==?{}'.format(name,?month))data_new.to_excel('{}.xlsx'.format(str(filename).split('.')[0]))messagebox.showinfo('Info',?'篩選完成并生成文件!')root.destroy()except?Exception?as?e:print(e)messagebox.showinfo('Info',?'篩選失敗!')root?=?Tk() root.config(background="#6fb765") root.title('自動(dòng)轉(zhuǎn)透視表小工具') root.geometry('500x250') e1?=?Entry(root,?width=30) e1.grid(row=2,?column=0)btn1?=?Button(root,?text='?上傳文件?',?command=Upload).grid(row=2,?column=10,?pady=5)box1?=?ttk.Combobox(root) #?使用?grid()?來控制控件的位置 box1.grid(row=5,?sticky="NW") #?設(shè)置下拉菜單中的值 box1['value']?=?('A',?'B',?'C',?'D',?'供應(yīng)商') #?通過?current()?設(shè)置下拉菜單選項(xiàng)的默認(rèn)值 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)#?編寫回調(diào)函數(shù),綁定執(zhí)行事件 def?func(event):global?b1,?b2b1?=?box1.get()b2?=?box2.get()#?綁定下拉菜單事件 box1.bind("<<ComboboxSelected>>",?func) box2.bind("<<ComboboxSelected>>",?func) btn2?=?Button(root,?text='?篩選數(shù)據(jù)?',?command=lambda:?select(b1,?b2)).grid(row=30,?column=10,?pady=5) mainloop()如果運(yùn)行結(jié)果如上,說明代碼沒有問題了,可以進(jìn)行下一步。
四、打包 Python 程序生成 exe
打開 DOS 窗口并切換到 兩個(gè) py 文件所在的目錄,注意路徑中不要有中文。
pyinsatller?-F?-w?opration.pypyinstaller 指令的常見可選參數(shù):
-i 給應(yīng)用程序添加圖標(biāo)
-F 指定打包后只生成一個(gè)exe格式的文件
-D –onedir 創(chuàng)建一個(gè)目錄,包含exe文件,但會(huì)依賴很多文件(默認(rèn)選項(xiàng))
-c –console, –nowindowed 使用控制臺(tái),無界面(默認(rèn))
-w –windowed, –noconsole 使用窗口,無控制臺(tái)
-p 添加搜索路徑
在當(dāng)前的目錄下,將會(huì)生成兩個(gè)文件夾:build 和 dist。dist 里面就是所有可執(zhí)行 exe 文件,發(fā)送快捷方式到桌面,點(diǎn)擊 opration.exe 就能運(yùn)行了,可以發(fā)它的快捷方式發(fā)送到桌面,雙擊就可以。
五、解決 exe 文件可能過大問題
有的伙伴 Python 環(huán)境剛安裝沒多久,可能不存在這個(gè)文件過大的問題。像我的電腦里安裝了 Python 很多的依賴包和 anaconda 等等,打包出來的文件居然 660M,打包時(shí)間長,執(zhí)行時(shí)還卡,后來經(jīng)過整改縮小到 31M,打包快,秒級(jí)執(zhí)行。解決方案是在 Windows 系統(tǒng)下安裝一個(gè) Python 的虛擬環(huán)境,前提是已經(jīng)在電腦上安裝過 Python 才可以進(jìn)行如下操作。
找到 Python 所在路徑,如果忘記了,可以在電腦左下角搜索【編輯系統(tǒng)環(huán)境變量】——【用戶變量】——【PATH】中找到
配置虛擬環(huán)境
虛擬環(huán)境可以理解為是 Python 解釋器的一個(gè)副本,在這個(gè)環(huán)境你可以安裝私有包,而且不會(huì)影響系統(tǒng)中安裝的全局 Python 解釋器。虛擬環(huán)境非常有用,可以在系統(tǒng)的 Python 解釋器中避免包的混亂和版本的沖突。
重要是不同虛擬環(huán)境可以搭建不同的 Python 版本,創(chuàng)建時(shí)候選擇,我們這里需要一個(gè)相對(duì) "干凈" 的 Python 環(huán)境,沒有安裝過多依賴包,避免 exe 打包文件過大,所以用到虛擬環(huán)境。
安裝虛擬環(huán)境依賴包
pip?install?virtualenv pip?install?virtualenvwrapper-win創(chuàng)建虛擬環(huán)境命令
mkvirtualenv?-p="C:\Users\cherich\AppData\Local\Programs\Python\Python38\python.exe"?py38進(jìn)入虛擬環(huán)境,可以看到只有幾個(gè)默認(rèn)的 Python 庫
這時(shí)可以測(cè)試一下代碼,是否缺少相關(guān)依賴,比如我這個(gè)缺少 Pandas,openpyxl,依次按照 pip install 包名安裝即可,非常重要的點(diǎn):pyinstaller 必須重新安裝,文件才會(huì)縮小。
上述操作完成后,打包就可以了,最后退出虛擬環(huán)境即可。
退出虛擬環(huán)境
deactivate整個(gè)自動(dòng)化思路的實(shí)現(xiàn)就完成了,大家可以將整個(gè)流程套用到你現(xiàn)有的重復(fù)性工作中,在過程中有兩個(gè)需要注意的點(diǎn),如下:
盡量不要用中文路徑,要不會(huì)報(bào)些莫名其妙的錯(cuò)誤。
導(dǎo)包是盡量避免使用 import * 導(dǎo)入不必要的包,節(jié)省打包和執(zhí)行時(shí)間。
讓代碼自動(dòng)工作,省下來的時(shí)間,喝喝茶,陪陪你的女神!今天的文章寫到這里,如果你覺得有用,歡迎點(diǎn)贊吶 !
-?END -
對(duì)比Excel系列圖書累積銷量達(dá)15w冊(cè),讓你輕松掌握數(shù)據(jù)分析技能,可以在全網(wǎng)搜索書名進(jìn)行了解:總結(jié)
以上是生活随笔為你收集整理的Python 开发桌面小工具,让代码替我们干重复的工作!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 明日之后科技会的困扰奖励
- 下一篇: Python爬取天气数据及可视化分析!