软件网盘提取码:9qke
手动反爬虫,禁止转载:原博地址 https://blog.csdn.net/lys_828/article/details/115771446
知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息
在电脑安装软件的时候经常会遇到有些问题导致没有办法安装,最简单粗暴的方式就是把这个软件所有的相关的文件全部删除,那么问题就来了,要删除的文件怎么找呢?因此也就有了这个需求(实际上今天写这篇文章就是简单的因为学妹把软件删了,但是找不到之前软件里面处理的文件,呜呜呜~~~)
直接给出代码,需要用到之前梳理的办公自动化相关的知识,感兴趣的可以了解一下:自动化办公专题,代码如下:
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、企业人员信息、测试\测试人员。
图示数据如下
调用函数,执行代码最后数据的结果为:(在使用这个函数的时候,只需要指定一下路径和要查找的内容就行了)
上诉的函数,如果直接在编辑器中打开,然后输入路径和查找内容,程序也就自动执行了,但是需要有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创建点简单的小程序还行,一旦运行操作过于耗时,程序也就自动崩溃了
又回到了我最喜欢的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() #程序运行
这里使用pyinstaller模块,关于这个模块的使用可以参照:将python代码打包成系统可执行文件(Pyinstaller模块)
在py文件所在目录打开命令行,然后执行如下指令
pyinstaller -F 文件查找小软件.py -n 文件查找小软件
期间可能会有360跳出来阻止你生成小软件,这时候果断把360给退出
最后软件就打包好了,生成的软件就在dist文件夹中,这里没有指定图片,有兴趣的话也可以指定一下图片,链接中有如何指定软件的图片
最后就是测试一下软件的使用了,使用结果如下,很完美的解决问题
撒花✿✿ヽ(°▽°)ノ✿