首頁  >  文章  >  後端開發  >  太強了! Python 開發桌面小工具,讓程式碼替我們做重複的工作!

太強了! Python 開發桌面小工具,讓程式碼替我們做重複的工作!

WBOY
WBOY轉載
2023-05-06 11:10:062089瀏覽

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

決定寫這篇文章的初衷是來自一位小夥伴的問題,關於"如何根據資料來源用Python 自動產生透視表",這個問題背後有個非常好的解決思路,讓程式碼替我們做重複的工作,進而減輕工作量,減少出錯。

Python 開發的小工具其實是將 Python 程式打包成 exe,分享即可用,即使電腦沒有安裝 Python 環境,也可以使用,用程式碼提高工作效率,盡量少加班。

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

內容大綱

  • # 明確需求:自動產生透視表【這部分可以換成你的重複性工作】
  •  安裝三方相依程式庫:tkinter 與pyinstaller
  •  程式碼實作:包含兩部分Python 產生透視表和桌面GUI 連線設計
  •  打包Python程式產生exe 執行檔
  •  解決exe 檔案可能過大問題:安裝虛擬環境

1. 需求背景

將運作中重複性的操作,利用供應商名稱,月份,入庫金額三個欄位來產生想要的透視表格式。

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

2. 安裝三方依賴函式庫

#建立桌面窗口,這裡使用tkinter,它是Python 自帶的GUI 函式庫,安裝後即可使用。

pip install tkinter

使用pyinsatller 將程式打包成exe,好處是不需要將程式碼部署到伺服器,直接將打包好的exe 發給對方,就能直接使用,對於這種小而輕的功能非常友好。

pip install pyinstaller

3. 程式碼實作

Excel 檔案產生透視表和篩選數據,檔案名稱:excel_to_pivot.py

import pandas as pd
import numpy as np
class ExcelToPivot(object):
 def __init__(self, filename, file_path):
 self.file_name = filename
 self.file_path = file_path
 """
 excel自动转透视表功能
 返回透视结果
 """
 def excel_Pivot(self):
 print(self.file_path)
 data = pd.read_excel(self.file_path)
 data_pivot_table = pd.pivot_table(data, index=['供应商名称', '月份'], 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('供应商名称 == ["{}"] & 月份 == {}'.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/' + filename
 pross = ExcelToPivot(filename, path)
 print(pross.select_data("C", 4))

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

#設計桌面視窗功能,檔案名稱:opration.py

from tkinter import Tk, Entry, Button, mainloop
import tkinter.filedialog
import excel_to_pivot
from tkinter import messagebox
from tkinter import ttk
def Upload():
 global filename, data_pivot_table
 try:
 filename = tkinter.filedialog.askopenfilename(title='选择文件')
 pross = excel_to_pivot.ExcelToPivot(str(filename).split('/')[-1], filename)
 data_pivot_table = pross.excel_Pivot()
 messagebox.showinfo('Info', '转换成功!')
 except Exception as e:
 print(e)
 messagebox.showinfo('Info', '转换失败!')
def select(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()
 except Exception as e:
 print(e)
 messagebox.showinfo('Info', '筛选失败!')
root = Tk()
root.config(background="#6fb765")
root.title('自动转透视表小工具')
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")
# 设置下拉菜单中的值
box1['value'] = ('A', 'B', 'C', 'D', '供应商')
# 通过 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)
# 编写回调函数,绑定执行事件
def func(event):
 global b1, b2
 b1 = box1.get()
 b2 = box2.get()
# 绑定下拉菜单事件
box1.bind("<<ComboboxSelected>>", func)
box2.bind("<<ComboboxSelected>>", func)
btn2 = Button(root, text=' 筛选数据 ', command=lambda: select(b1, b2)).grid(row=30, column=10, pady=5)
mainloop()

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

如果執行結果如上,表示程式碼沒有問題了,可以進行下一步。

4. 打包 Python 程式產生 exe

開啟 DOS 視窗並切換到 兩個 py 檔案所在的目錄,注意路徑中不要有中文。

pyinsatller -F -w opration.py

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

pyinstaller 指令的常見可選參數:

  •  -i 為應用程式新增圖示
  • # -F 指定打包後只產生一個exe格式的檔案
  •  -D –onedir 建立一個目錄,包含exe文件,但會依賴許多檔案(預設選項)
  • # -c –console, –nowindowed 使用控制台,無介面(預設)
  • # -w –windowed, –noconsole 使用窗口,無控制台
  • # -p 新增搜尋路徑

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

#在目前的目錄下,將會產生兩個資料夾:build和dist。 dist 裡面就是所有可執行 exe 文件,發送捷徑到桌面,點選 opration.exe 就能運作了,可以發它的捷徑傳送到桌面,雙擊就可以。

5. 解決 exe 檔案可能過大問題

有的夥伴 Python 環境剛安裝沒多久,可能不存在這個檔案過大的問題。像我的電腦安裝了 Python 很多的依賴套件和 anaconda 等等,打包出來的檔案居然 660M,打包時間長,執行時還卡,後來經過整改縮小到 31M,打包快,秒級執行。解決方案是在 Windows 系統下安裝一個 Python 的虛擬環境,前提是已經在電腦上安裝過 Python 才可以進行以下操作。

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

#

找到 Python 所在路径,如果忘记了,可以在电脑左下角搜索【编辑系统环境变量】——【用户变量】——【PATH】中找到

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

配置虚拟环境

虚拟环境可以理解为是 Python 解释器的一个副本,在这个环境你可以安装私有包,而且不会影响系统中安装的全局 Python 解释器。虚拟环境非常有用,可以在系统的 Python 解释器中避免包的混乱和版本的冲突。

重要是不同虚拟环境可以搭建不同的 Python 版本,创建时候选择,我们这里需要一个相对 "干净" 的 Python 环境,没有安装过多依赖包,避免 exe 打包文件过大,所以用到虚拟环境。

安装虚拟环境依赖包

pip install virtualenv
pip install virtualenvwrapper-win

创建虚拟环境命令

mkvirtualenv -p="C:UserscherichAppDataLocalProgramsPythonPython38python.exe" py38

进入虚拟环境,可以看到只有几个默认的 Python 库

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

这时可以测试一下代码,是否缺少相关依赖,比如我这个缺少 Pandas,openpyxl,依次按照 pip install 包名安装即可,非常重要的点:pyinstaller 必须重新安装,文件才会缩小。

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

上述操作完成后,打包就可以了,最后退出虚拟环境即可。

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

退出虚拟环境

deactivate

太强了!Python 开发桌面小工具,让代码替我们干重复的工作!

以上是太強了! Python 開發桌面小工具,讓程式碼替我們做重複的工作!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除