“春天像一个轻浮的姑娘,抚着你的额头,轻轻吻你,就不知去向”
——席勒
Python教程 第五期
注意:该项目用到了还没有学到的tkinter库,大家可以根据情况进行研究或者略过,该库在后面会讲到;是剩下的re库在上一期讲过了,可以当作复习。
不知道大家有没有经历过
我之前打开文件准备搜索的时候,看到了……这样壮阔的场面。
然后在不停转动的秒针的监视下,耐着性子找
当然微软也为我们提供了便利,文件搜索
但是有些是文件夹里的子文件和文件夹名字一摸一样,看着一下就蒙圈了
找到了之后,还需要整理出文件名
然后心态就崩了
二百多个项目一个一个整理?
怕是千手观音也做不到吧
所以我就做了这个项目
这样就可以一步整理出所有的文件了
不止如此,它还可以搜索root(路径)(测试中,功能实现存在bug)、dirs(文件夹)
而搜索方式也十分多样,有不匹配(完全整理)、一般匹配(关键字搜索)和高级搜索(正则匹配式)
现在先把脚本给大家
main文件
#!/usr/bin/python# -*- coding:utf-8 -*-import tkinter as tkimport toolmod = "Mismatch"window = tk.Tk()entry_Matching_formula = tk.Entry(window,width=50)label_Matching_formula = tk.Label(window,text="输入关键字")entry_Matching_formula.insert(0,"findall(keyword,text)")list_Matching_formula = [label_Matching_formula,entry_Matching_formula ]entry_match = tk.Entry(window,width=50)label_match = tk.Label(window,text="输入匹配式(语言python)")list_match = [entry_match,label_match]def get_entry(): return entry_root.get()def paint_list(data): for d in data: print(d)def General_matching_method(): global mod mod = "General_matching_method" for m,f in list_match,list_Matching_formula: f.pack_forget() m.pack()def Mismatch(): global mod mod = "Mismatch" for m,f in list_match,list_Matching_formula: m.pack_forget() f.pack_forget()def Advanced_matching(): global mod mod ="Advanced matching" for m,f in list_match,list_Matching_formula: m.pack_forget() f.pack()def match(data): if mod == "Mismatch": pass elif mod == "General_matching_method": text = entry_match.get() data = [d for d in data if text in d] else: text = entry_Matching_formula.get() tool.advanced_matching(str(text)) from matching import matching data =[matching(d) for d in data] while [] in data: data.remove([]) paint_list(data)class get(): def __init__(self): pass def get_root(self): self.top = get_entry() data = tool.file_name(self.top)["root"] print(data) def get_dirs(self): self.top = get_entry() data = tool.file_name(self.top)["dirs"] match(data) def get_files(self): self.top = get_entry() data = tool.file_name(self.top)["files"] match(data)window.geometry("500x600")window.title("文件汇总工具")tk.Label(window,text="输入路径").pack()entry_root = tk.Entry(window,width=50)entry_root.pack()tk.Button(window,width=10,text="root",command=get().get_root).pack()tk.Button(window,width=10,text="dirs",command=get().get_dirs).pack()tk.Button(window,width=10,text="files",command=get().get_files).pack()radiobutton1 = tk.Radiobutton(window,text="高级匹配(正则匹配式)",value="Advanced matching",command=Advanced_matching)radiobutton2 = tk.Radiobutton(window,text="一般匹配法(关键字)",value="General matching method",command=General_matching_method)radiobutton3 = tk.Radiobutton(window,text="不匹配",value="Mismatch",command=Mismatch)radiobutton = [radiobutton1,radiobutton2,radiobutton3]for r in radiobutton: r.pack()window.mainloop()
tool文件
#!/usr/bin/python# -*- coding:utf-8 -*-from os import walkfrom re import findalldef file_name(top): root,dirs,files = [],[],[] for r,d,f in walk(top=top,topdown=False): root.append(r) dirs.append(d) files.append(f) return {"root":root[-1],"dirs":dirs[-1],"files":files[-1]}def newly_build(text): open("matching.py","w+").write("") with open("matching.py","a+") as w: data = text.split("\n") w.write('''from re import findalldef matching(text):''') for d in data: w.write(" data = ") w.write(d + "\n") w.write(" return data")def general_matching_method(text,keyword): data = findall(keyword,text) return datadef advanced_matching(matching_formula): newly_build(str(matching_formula))
请保证这两个文件在同一路径下,否则会报错
下面解释一些核心内容
模式
因为匹配有三种模式,所以用一个全局变量专门储存mod是必不可少的
mod = "Mismatch"
匹配
关于“搜索”,这显然是核心功能之一
我们有两种匹配法
第一种是一般匹配法
def general_matching_method(text,keyword): data = findall(keyword,text) return data
这是关于关键字的,很简单。因为re正则匹配中提到过,这里不作赘述了
然后是第二种
高级匹配
def newly_build(text): open("matching.py","w+").write("") # 清空文件(创建文件) with open("matching.py","a+") as w: # 设置写入模式为“追加” data = text.split("\n") w.write('''from re import findalldef matching(text):''') for d in data: w.write(" data = ") w.write(d + "\n") # 写入用户输入的匹配式 w.write(" return data")
这个看起来很乱,其实仔细看就可以看懂
就是在另一个python文件中写入了一个函数
然后main文件再调动这个函数,就可以实现按照用户输入的匹配式来匹配获得的信息了
def match(data): if mod == "Mismatch": pass elif mod == "General_matching_method": text = entry_match.get() data = [d for d in data if text in d] else: # 如果既不是“不匹配”也不是“一般匹配” text = entry_Matching_formula.get() tool.advanced_matching(str(text)) from matching import matching # (重新)载入matching库中的matching方法 data =[matching(d) for d in data] while [] in data: data.remove([]) paint_list(data)
项目下载(均免费)
- 脚本【支持 高级搜索+一般搜索+不搜索+基本功能;特点:速度快功能全】
下载链接:https://wws.lanzous.com/iexO9f2qz5i
注意:这是自解压程序,解压后(建议放到C盘以免报错)双击main.py运行程序。统一解压码为wzdhwn
2.exe打包程序【支持一般搜索+不搜索+基本功能;特点:简介方便】
下载链接:https://wws.lanzous.com/iT9mqf2qz4h