【python自動化辦公】電腦全盤路徑/指定路徑下檔案(夾)查詢,並封裝為可執行程式

2021-04-18 10:00:04

軟體網路硬碟提取碼:9qke

手動反爬蟲,禁止轉載:原博地址 https://blog.csdn.net/lys_828/article/details/115771446

 知識梳理不易,請尊重勞動成果,文章僅釋出在CSDN網站上,在其他網站看到該博文均屬於未經作者授權的惡意爬取資訊

1 需求

在電腦安裝軟體的時候經常會遇到有些問題導致沒有辦法安裝,最簡單粗暴的方式就是把這個軟體所有的相關的檔案全部刪除,那麼問題就來了,要刪除的檔案怎麼找呢?因此也就有了這個需求(實際上今天寫這篇文章就是簡單的因為學妹把軟體刪了,但是找不到之前軟體裡面處理的檔案,嗚嗚嗚~~~)
在這裡插入圖片描述

2 簡單的模板

直接給出程式碼,需要用到之前梳理的辦公自動化相關的知識,感興趣的可以瞭解一下:自動化辦公專題,程式碼如下:

import glob
import os

def find_files(path,content='demo'):
	os.chdir(path)
	files = glob.glob(f'**/*{content}*', recursive = True)
	print(f'在當前路徑下:{path}\n一共找到{len(files)}個檔案')
	print('-'*20)
	print(files)

find_files(r'C:\Users\86177\Desktop','人員')

接下來就是進行測試資料的建立和實現程式封裝解析了,為了方便演示,現在桌面建立三個資料(檔案/資料夾),分別是:人員.txt、企業人員資訊、測試\測試人員。

  • 第一個是檔案資料,要查詢的文字是在開頭的位置、
  • 第二個資料是空資料夾,要查詢的文字內容在中間、
  • 第三個就是一個資料夾中的檔案,除去字尾名,要查詢的內容是在末尾

圖示資料如下
在這裡插入圖片描述
呼叫函數,執行程式碼最後資料的結果為:(在使用這個函數的時候,只需要指定一下路徑和要查詢的內容就行了)
在這裡插入圖片描述

3 程式碼優化並設計視覺化介面

上述的函數,如果直接在編輯器中開啟,然後輸入路徑和查詢內容,程式也就自動執行了,但是需要有python的環境,而且輸入路徑的時候有跳脫字元的干擾,因此,就想著直接封裝為一個小程式,用的時候直接雙擊就能彈出來一個小視窗,然後讓我選擇路徑地址和輸入內容就完美了。

使用PySimpleGUI建立視覺化介面,這裡很簡潔,就是兩個輸入框加上一個確定按鈕即可,然後獲取使用者指定的路徑和輸入的查詢內容,如下
在這裡插入圖片描述
程式碼解析如下,前面的函數不要動,直接載入建立視窗的程式碼

import PySimpleGUI as sg

def find_files(path,content='demo'):
	os.chdir(path)
	files = glob.glob(f'**/*{content}*', recursive = True)
	print(f'在當前路徑下:{path}\n一共找到{len(files)}個檔案')
	print('-'*20)
	print(files)

layout = [
	[sg.FolderBrowse('  Path :'),sg.InputText()], #第一行新增一個路徑選擇按鈕和路徑輸入框,可以通過按鈕選擇也可手動輸入
	[sg.Text('Content:'),sg.InputText()], #第二行就是設定查詢內容輸入框
	[sg.Text(' '*40),sg.OK(size = (10,1))] #第三問就是放置確認按鈕,為了保證按鈕在中間的位置,兩端可以塞空字串
]

window = sg.Window('檔案查詢小程式', layout)
while True:
	event, values = window.read()
	if event == sg.WIN_CLOSED or event == 'Exit':
		break
	# print(event,values) 通過輸出的values,可以找到我們要的內容
	find_files(values[0],values[1]) #這裡呼叫函數進行查詢檔案
	print() #換行,方便下次內容的查詢
window.close()

首先還是測試最初的三個資料結果如下:(輸出結果沒有問題)
在這裡插入圖片描述
然後就是就是測試一下C槽內的檔案和D槽中的檔案,先測試C槽中檔案,比如找個包含20new的檔案(一個新聞分類的資料集),點選OK後,這個軟體直接崩潰了,原因就是C槽的檔案太多了,然後直接註釋掉建立介面的程式碼,直接跑函數,可以發現這個查詢過程花了106.3s,也難怪使用這個小工具會直接奔潰
在這裡插入圖片描述
說明通過PySimpleGUI建立點簡單的小程式還行,一旦執行操作過於耗時,程式也就自動崩潰了

4 再接再厲嘗試tkinter及全部程式碼

又回到了我最喜歡的tkinter製作小玩意的時候了,首先還是一樣,載入一下製作小東西的模板

from tkinter import *  #匯入tkinter中所有的方法
from tkinter import filedialog, messagebox #這兩個需要單獨匯入
from tkinter.ttk import Scrollbar, Checkbutton, Label, Button #匯入ttk模組中的指定幾個元件

#繼承Tk這個類
class FindFiles(Tk):
	
	def __init__(self):     #初始化自己的建立的EditorPlus類
		super().__init__()  #在繼承Tk這個類的基礎上在自己的類中新增內容
		self._set_window_() #設定程式執行主視窗
		self._set_content_()


	#設定初始化視窗的屬性
	def _set_window_(self):
		self.title("檔案查詢器")              			     #視窗名稱
		scn_width, scn_height = self.maxsize() 				 #獲得程式執行機器的解析度(螢幕的長和寬)
		wm_val = '340x80+{}+{}'.format((scn_width - 750) // 2, (scn_height - 450) // 2)
		self.geometry(wm_val) 				   				 #將視窗設定在螢幕的中間
		self.protocol('WM_DELETE_WINDOW', self.exit_editor)  #設定視窗關閉提醒

	def exit_editor(self): 
		if messagebox.askokcancel('退出?','確定退出嗎?'):      #設定文字提示框
			self.destroy() 									 #滿足條件的話主視窗退出

	def _set_content_(self):
		Label(self, text='請輸入檔案路徑',width=15).grid(row=0, column=0) #設定提醒輸入路徑的標籤 
		self.path = Entry(self,width = 30) #設定路徑輸入框 
		self.path.grid(row=0, column=1) #放置位置 
		Label(self, text='請輸入查詢內容',width=15).grid(row=1, column=0) #設定郵箱輸入標籤 
		self.content = Entry(self,width = 30) #設定郵箱地址輸入框 
		self.content.grid(row=1, column=1) ##放置位置 
		Button(self, text="確定", command=self.onclick).grid(row = 2, column = 0, columnspan = 2) #放置確定按鈕


	def onclick(self): 
		path = self.path.get()  #獲取路徑
		content = self.content.get()  #獲取郵箱地址
		self.find_files(path,content)


	def find_files(self,path,content='demo'):
		os.chdir(path)
		files = glob.glob(f'**/*{content}*', recursive = True)
		print(f'在當前路徑下:{path}\n一共找到{len(files)}個檔案')
		print('-'*20)
		print(files)

if __name__ == '__main__':  #程式碼分塊
	app = FindFiles()      #類的範例化
	app.mainloop()			#程式執行

可以參考之前寫的自制市區縣經緯度查詢工具並將資料儲存本地,這裡就是將那裡面的程式碼直接拿過來,然後修改了部分內容就OK了,然後執行程式,等待一陣子後,程式輸出了結果,雖然中間也有一陣子顯示未響應,但是不影響最終的結果輸出
在這裡插入圖片描述
最終全部的程式碼如下:(太晚了,關於開啟資料夾的操作就沒有寫了,明天有事,抽空有時間再補上)

# -*- coding:utf-8 -*-
import glob
import os
import PySimpleGUI as sg





# layout = [
# 	[sg.FolderBrowse('  Path :'),sg.InputText()],
# 	[sg.Text('Content:'),sg.InputText()],
# 	[sg.Text(' '*40),sg.OK(size = (10,1))]
# ]

# window = sg.Window('檔案查詢小程式', layout)
# while True:
# 	event, values = window.read()
# 	if event == sg.WIN_CLOSED or event == 'Exit':
# 		break
# 	# print(event,values)
# 	find_files(values[0],values[1])
# 	print()
# window.close()



from tkinter import *  #匯入tkinter中所有的方法
from tkinter import filedialog, messagebox #這兩個需要單獨匯入
from tkinter.ttk import Scrollbar, Checkbutton, Label, Button #匯入ttk模組中的指定幾個元件

#繼承Tk這個類
class FindFiles(Tk):
	
	def __init__(self):     #初始化自己的建立的EditorPlus類
		super().__init__()  #在繼承Tk這個類的基礎上在自己的類中新增內容
		self._set_window_() #設定程式執行主視窗
		self._set_content_()


	#設定初始化視窗的屬性
	def _set_window_(self):
		self.title("檔案查詢器")              			     #視窗名稱
		scn_width, scn_height = self.maxsize() 				 #獲得程式執行機器的解析度(螢幕的長和寬)
		wm_val = '340x80+{}+{}'.format((scn_width - 750) // 2, (scn_height - 450) // 2)
		self.geometry(wm_val) 				   				 #將視窗設定在螢幕的中間
		self.protocol('WM_DELETE_WINDOW', self.exit_editor)  #設定視窗關閉提醒

	def exit_editor(self): 
		if messagebox.askokcancel('退出?','確定退出嗎?'):      #設定文字提示框
			self.destroy() 									 #滿足條件的話主視窗退出

	def _set_content_(self):
		Label(self, text='請輸入檔案路徑',width=15).grid(row=0, column=0) #設定提醒輸入路徑的標籤 
		self.path = Entry(self,width = 30) #設定路徑輸入框 
		self.path.grid(row=0, column=1) #放置位置 
		Label(self, text='請輸入查詢內容',width=15).grid(row=1, column=0) #設定郵箱輸入標籤 
		self.content = Entry(self,width = 30) #設定郵箱地址輸入框 
		self.content.grid(row=1, column=1) ##放置位置 
		Button(self, text="確定", command=self.onclick).grid(row = 2, column = 0, columnspan = 2) #放置確定按鈕


	def onclick(self): 
		path = self.path.get()  #獲取路徑
		content = self.content.get()  #獲取郵箱地址
		self.find_files(path,content)


	def find_files(self,path,content='demo'):
		os.chdir(path)
		files = glob.glob(f'**/*{content}*', recursive = True)
		print(f'在當前路徑下:{path}\n一共找到{len(files)}個檔案')
		print('-'*20)
		print(files)
		print()

if __name__ == '__main__':  #程式碼分塊
	app = FindFiles()      #類的範例化
	app.mainloop()			#程式執行

5 封裝小程式

這裡使用pyinstaller模組,關於這個模組的使用可以參照:將python程式碼打包成系統可執行檔案(Pyinstaller模組)

在py檔案所在目錄開啟命令列,然後執行如下指令

pyinstaller -F 檔案查詢小軟體.py -n 檔案查詢小軟體

期間可能會有360跳出來阻止你生成小軟體,這時候果斷把360給退出
在這裡插入圖片描述
最後軟體就打包好了,生成的軟體就在dist資料夾中,這裡沒有指定圖片,有興趣的話也可以指定一下圖片,連結中有如何指定軟體的圖片
在這裡插入圖片描述
最後就是測試一下軟體的使用了,使用結果如下,很完美的解決問題
在這裡插入圖片描述
撒花✿✿ヽ(°▽°)ノ✿