电脑指定路径下文件查找,并封装为可执行程序
软件网盘提取码: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文件夹中,这里没有指定图片,有兴趣的话也可以指定一下图片,链接中有如何指定软件的图片
最后就是测试一下软件的使用了,使用结果如下,很完美的解决问题
撒花✿✿ヽ(°▽°)ノ✿