飞道的博客

【python自动化办公】电脑全盘路径/指定路径下文件(夹)查找,并封装为可执行程序

275人阅读  评论(0)

软件网盘提取码: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文件夹中,这里没有指定图片,有兴趣的话也可以指定一下图片,链接中有如何指定软件的图片

最后就是测试一下软件的使用了,使用结果如下,很完美的解决问题

撒花✿✿ヽ(°▽°)ノ✿


转载:https://blog.csdn.net/lys_828/article/details/115771446
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场