【python】app未注册用户自动筛选
本文目標:手把手教一名零基礎員工開發一款python桌面應用程序
項目目標:領導給了兩張表,一張是全部員工表,一張是注冊用戶表,讓統計未注冊用戶的詳細清單
前期準備:自學python基本語法,能看懂python語句即可
結果展示:
上圖為運行結果。
接下來我將從頭開始講解。
一、環境搭建
Python的環境搭建很簡單,在官網下載后直接安裝即可,網址為:
“https://www.python.org/downloads/windows/”。注意選擇版本為3.9,因為后面用到的打包軟件不支持3.10。
安裝成功后確認一下是否將安裝目錄添加到環境變量里,若沒有添加需要自行添加。接下來安裝本項目需要用到的模塊pandas,openpyxl,pywin32,pyinstaller,使用pip命令安裝即可(pip是python自帶的包下載軟件),在命令行敲下以下代碼:
pip config set global.index-url
https://pypi.tuna.tsinghua.edu.cn/simple
上面這行代碼可選擇執行,它的作用是修改pip的下載源地址,默認的地址在國外服務器,速度很慢,這里修改為清華大學的開源鏡像站。
在CMD命令行窗口依次輸入以下代碼:
pip install pandas
pip install openpyxl
pyp install pywin32
pip install pyinstaller
如果無法安裝,提示pip版本太低,請按照提示,執行“pip install --upgrade pip”來更新pip。
上面安裝的4個模塊,pandas用于從excel中取數,處理,以及寫入excel文檔。openpyxl是pandas依賴的一個包,pyinstaller是打包工具,pywin32是pyinstaller在windows平臺打包需要依賴的包。
二、數據審查
環境搭建好了,可以開始我們的項目了,首先對數據進行審查。
觀察“成都公司全部用戶.xlsx”表,其數據格式如下:
彭** | P*******9 | /xx公司/xx部門/ |
曾** | Z*******4 | /xx公司/xx部門/ |
于** | Y*******2 | /xx公司/xx部門/ |
再觀察“成都公司注冊用戶統計.xlsx”表,其數據格式如下:
姓名 | 部門 | 性別 | 企業簡稱 | 使用狀態 |
劉** | /xx公司/xx部門/ | 男 | XX | 已通知 |
王** | /xx公司/xx部門/ | 男 | XX | 已通知 |
黃** | /xx公司/xx部門/ | 男 | XX | 已通知 |
任務目標是從前表中篩選出不在后表中的人,顯然僅憑名字是有可能因為同名而出錯的,所以要根據名字和部門兩個信息來進行篩選。
三、代碼編寫
了解了數據,確定了方案后就可以開始編程了。
首先導入我們需要的模塊:
import pandas as pd然后讀取用戶輸入的文件名(設置默認文件名更方便使用):
filename=input() if len(filename)<1 :filename="./成都公司注冊用戶統計.xlsx"獲取到文件名后就可以讀取文件了:
df_all = pd.read_excel("./成都公司全部用戶.xlsx",header=None) df = pd.read_excel(filename,header=None)這里因為“成都公司全部用戶.xlsx”是固定不變的,所以作為資源文件放在項目目錄,不需要用戶輸入文件名。其中df和df_all兩個變量是DataFrame類型,和二維數組比較類似,可以很方便的存儲表格。pandas.read_excel()函數可以讀取excel文檔,第一個參數是文件名,參數header設置表格是否有表頭,”None”表示沒有,設置成0或[0,1,2]這樣的值則意味著表格的前幾行作為表頭。
接下來對獲取到的數據進行處理:
df=df.drop(index=0) df_all[3]=df_all[0]+df_all[2] df[2]=df[0]+df[1].apply(lambda x: x.partition("xx公司")[2]+"/") all=[] all=df_all[3].values.tolist() done=[] done=df[2].values.tolist()將第一張表的第1列和第3列合并,第二張表的第1列和第2列的一部分內容合并,并在尾部補充一個字符“/”使得,兩張表的部門格式一致。最后以合并得到的列生成列表,以便后續處理。
使用filter函數篩選出未注冊的人員,再轉換成列表存儲到result變量中:
result=[] result = list(filter(lambda x:x not in done, all))filter函數接受一個函數變量作為參數,這個函數必須接受一個參數并返回布爾值,filter依據這個值來篩選all列表中的每一項。
至此,我們得到了我們想要的結果,現在只需要把結果稍微處理一下,然后輸出到一個excell表格即可:
formatresult=[] ? ? #將結果轉換成多列,便于審查 unworklist=[] ? ? ? #挑選出不在崗的人 for x in result:if x.rfind('不在崗')>0:unworklist.append(x)else:formatresult.append(x.split('/')) df_result=pd.DataFrame(formatresult) df_unwork=pd.DataFrame(unworklist) print("處理完成,正在輸出結果...") wr=pd.ExcelWriter("./result.xlsx") df_result.to_excel(wr,"Sheet1") df_unwork.to_excel(wr,"Sheet2") wr.save() wr.close()這里將之前合并的列以“/”為間隔拆分為多列,便于審查,也順便把不在崗的人員篩選了出去存入另一張子表。最后使用ExcelWriter將結果分別寫入兩張子表保存。
四、打包項目
為了使得編寫好的python程序在所有windows電腦上都能運行,我們需要把程序打包成exe可執行文件。這就要用到一開始下載的模塊pyinstaller。
進入到項目目錄,打開CMD命令行窗口,執行命令:
pyinstaller -F igw-uninstaller.py
其中”igw-uninstaller.py”是程序文件名,等待程序執行完畢后會在項目目錄里生成兩個文件夾“build”和“dist”以及一個“.spec”文件,“build”保存了一些生成過程中的日志文件,“.spec”文件為生成過程中產生的目錄文件。“dist”文件夾中保存的則是最終生成的“.exe”文件,默認以程序文件名一致。
將資源文件“成都公司全部用戶.xlsx”放到和可執行文件同級目錄下,就可以運行程序了,雙擊運行一下吧!
至此,未注冊用戶的詳細清單全部理出,并存入result.xlsx。
五、后記
本文主要介紹了一個簡單的python桌面應用程序實現方式,閱讀本文能快速了解一個python程序的設計,開發,與打包發布過程,希望能幫助讀者了解python,開發一個python桌面程序也不是那么難嘛!后面有更復雜的應用場景我們還會進行UI的開發。
開源代碼:
#app安裝統計相關函數 from numpy import format_parser import pandas as pdprint("請保證‘成都公司全部用戶.xlsx’文件與本程序位于同一目錄,且文件名一致") print("請輸入已注冊用戶統計表文件地址,默認為‘./成都公司注冊用戶統計.xlsx’,默認其位于當前目錄,使用默認文件名請直接回車:") filename=input() if len(filename)<1 :filename="./成都公司注冊用戶統計.xlsx" print("正在載入表格...") df_all = pd.read_excel("./成都公司全部用戶.xlsx",header=None) df = pd.read_excel(filename,header=None) print("載入表格成功,正在處理,請勿關閉程序...") df=df.drop(index=0) df_all[3]=df_all[0]+df_all[2] df[2]=df[0]+df[1].apply(lambda x: x.partition("xx公司")[2]+"/") all=[] all=df_all[3].values.tolist() done=[] done=df[2].values.tolist() #現在我們要得到在all列表里面不在done列表里面的 result=[] result = list(filter(lambda x:x not in done, all)) formatresult=[] ? ? #將結果轉換成多列,便于審查 unworklist=[] ? ? ? #挑選出不在崗的人 for x in result:if x.rfind('不在崗')>0:unworklist.append(x)else:formatresult.append(x.split('/')) df_result=pd.DataFrame(formatresult) df_unwork=pd.DataFrame(unworklist) print("處理完成,正在輸出結果...") wr=pd.ExcelWriter("./result.xlsx") df_result.to_excel(wr,"Sheet1") df_unwork.to_excel(wr,"Sheet2") wr.save() wr.close() input("完成,結果保存為result.xlsx,請輸入回車結束程序")往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載黃海廣老師《機器學習課程》視頻課黃海廣老師《機器學習課程》711頁完整版課件本站qq群554839127,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的【python】app未注册用户自动筛选的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同时运行多个logstash而kiban
- 下一篇: 【Python】推荐20个好用到爆的Pa