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

决定写这边文章的初衷是来源于一位小伙伴的问题,关于"如何根据数据源用 Python 自动生成透视表",这个问题背后有个非常好的解决思路,让代码替我们做重复的工作【减轻工作量,减少出错】;python开发的小工具实际上是将 python 程序打包成 exe,分享即可用【同事电脑没有 python 环境,也可以使用】,用代码提高工作效率,尽量少加班。


内容大纲

1、明确需求:自动生成透视表【这部分可以换成你的重复性工作】
2、安装三方依赖库:tkinter 和 pyinstaller
3、代码实现: 包括两部分 pyhton 生成透视表和桌面 GUI 联动设计
4、打包 pyhton程序 生成 exe 可执行文件
5、解决 exe 文件可能过大问题:安装虚拟环境

一、需求背景

将工作中重复性的操作,利用供应商名称,月份,入库金额三个字段来生成想要的透视表格式。

二、安装三方依赖库

  • 创建桌面窗口,这里使用 tkinter,它是 Python 自带的 GUI库,安装后即可使用。
pip install tkinter
  • 使用 pyinsatller 将程序打包成 exe,好处是不需要将代码部署到服务器,直接将打包好的exe发给对方,就能直接使用。对于这种小而轻的功能非常友好。
pip install pyinstaller

三、代码实现

1、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))

2、设计桌面窗口功能,文件名【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程序生成 exe

打开DOS窗口并切换到 两个 py 文件所在的目录,注意路径中不要有中文:

pyinsatller -F -w opration.py
pyinstaller指令的常见可选参数
-i 给应用程序添加图标
-F 指定打包后只生成一个exe格式的文件
-D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-c –console, –nowindowed 使用控制台,无界面(默认)
-w –windowed, –noconsole 使用窗口,无控制台
-p 添加搜索路径

在当前的目录下,将会生成两个文件夹:build和dist。dist里面就是所有可执行exe文件,发送快捷方式到桌面,点击 opration.exe 就能运行了,可以发它的快捷方式发送到桌面,双击就可以。

五、解决 exe 文件可能过大问题

有的伙伴 python 环境刚安装没多久,可能不存在这个文件过大的问题。像我的电脑里安装了 pyhton 很多的依赖包和 anaconda 等等,打包出来的文件居然660M,打包时间长,执行时还卡,后来经过整改缩小到31M,打包快,秒级执行。解决方案是在 windows 系统下安装一个 python 的虚拟环境,前提是已经电脑上已经安装过 python,才可以进行下面操作。

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

虚拟环境可以理解为是Python解释器的一个副本,在这个环境你可以安装私有包,而且不会影响系统中安装的全局Python解释器。虚拟环境非常有用,可以在系统的Python解释器中避免包的混乱和版本的冲突。【重要是不同虚拟环境可以搭建不同的python版本,创建时候选择】,我们这里需要一个相对 "干净" pyhton环境,没有安装过多依赖包,避免 exe 打包文件过大。所以用到虚拟环境,

① 安装虚拟环境依赖包
pip install virtualenv
pip install virtualenvwrapper-win
② 创建虚拟环境命令
mkvirtualenv -p="C:\Users\cherich\AppData\Local\Programs\Python\Python38\python.exe" py38
③ 进入虚拟环境,可以看到只有几个默认的 python 库
④ 这时可以测试一下代码,是否缺少相关依赖,比如我这个缺少pandas ,openpyxl,依次按照 pip install 包名安装即可,非常重要的点:pyinstaller 必须重新安装,文件才会缩小 !
⑤ 上述操作完成后,打包就可以了。最后退出虚拟环境即可。
⑥ 退出虚拟环境
deactivate

整个自动化思路的实现就完成了,大家可以将整个流程套用到你现有的重复性工作中。在过程中有两个需要注意的点!尽量不要用到中文路径,要不会报些莫名其妙的错;导包是尽量避免使用 import * 导入不必要的包,节省打包和执行时间。让代码自动工作,省下来的时间,喝喝茶,陪陪你的女神!今天的文章写到这里,如果你觉得有用,欢迎点赞呐 !

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容