深度优先搜索(Depth-First Search,DFS)
温馨提示:最好有数据结构那本书的基础知识,如果没有就直接看接地气的人话,也能懂
概念:是一种用于遍历或搜索树或图的算法。这个算法会尽可能深地搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。
节点:可以理解为分支
人话:如图所示,深度搜索的方式就是从根节点①开始搜索,先遍历②,查找②的下一个节点(⑤、⑥、⑦),因为⑤、⑥都没有下一个节点了,⑦搜索到有分支(⑩、⑪),由于访问完11没有节点,返回⑦又返回②,继续返回①然后同样的方法访问③和剩下的节点,直到全部访问完毕
顺序:①→②→⑤→⑥→⑦→⑩→⑪→③→④→⑧→⑨(结束)
这个过程就叫深度优先搜索,此时我们可以套在文件夹内,如图黄色代表文件夹,蓝色代表.doc文档文件的话那么就是这样
【自动化要求-题目/实操】
输入你需要查找到目录和输出存放文件的目录,假设存放的文件为.docx文档文件,那么将你输入需要查找的目录下所有的docx文件都转移到你的存放目录(移动所有文件)
import os #导入系统库os import shutil #实现移动文件的功能需要 #path代表待搜索的目录路径,result存储搜索到的文件路径列表 ##函数将path目录中的全部子目录和文件找到保存至result def search_dir(path, result): #使用os中的listdir得到path下的目录和文件,保存到child_files child_files = os.listdir(path) for child in child_files:#遍历child_files #通过join函数拼接子目录或文件的路径,存储至child child = os.path.join(path,child) #将child保存至result result.append(child) #append方法用于在列表的末尾添加新的元素 if os.path.isdir(child):#如果child是一个子目录 search_dir(child, result)#调用search_dir继续递归搜索child(继续调用自己) #输入搜索目录和docx文件保存的目录 input_dir = input("输入待搜索的目录:") output_dir = input("输入保存文件的目录:") #设置保存子目录与文件路径的列表files files= list() #将input_dir中的全部子目录和文件路径找到并保存到files search_dir(input_dir, files) for file in files: #遍历files print("find %s"%(file)) #打印搜索到的路径 #如果该路径是一个docx文件 if os.path.isfile(file) and file.endswith('.docx'): print("move %s"%(file)) #打印提示信息 shutil.move(file, output_dir) #将文件移动到output_dir
在控制台部分 :
我输入的搜索目录是【D\1】
输出目录是【D\1\整合】