Python实现目录遍历及文件搜索
前面我们已经掌握了目录的创建、修改和删除方法,但是要开发文件资源管理器程序,仅有这些知识还是不够的。我们还有下面的问题需要解决:如何遍历目录中所有的文件?如何在目录中搜索到指定的文件?当目录中有子目录时该如何处理?
如何遍历目录中所有的文件?
遍历就是对目录中的所有文件按顺序逐个访问。例如程序要求列出某个目录中所有的文件名称,我们就需要访问这个目录中所有的文件并获取文件的名称,然后将获取的文件名称输出到屏幕上。
那么,我们如何遍历目录中所有的文件呢?Python语言的OS模块为我们提供了两个列出目录中所有文件的方法:
![](https://pics7.baidu.com/feed/6609c93d70cf3bc7130e7209cea831a5cc112a71.jpeg?token=d7c384291c0964c0566df190dc569b56&s=7AA83C62198EC4CA1A75B4CB0000E0B1)
例1:使用listdir遍历目录文件
例1使用OS模块的listdir方法遍历D盘盘符下的pub目录,listdir返回一个列表,列表包含pub目录下所有文件名称,然后使用for循环输出列表。
![](https://pics4.baidu.com/feed/a9d3fd1f4134970a0709f01e8b625acca7865d31.jpeg?token=1ca27b4239ea9cc9d36f426f1872b94f&s=AEAAAD0A0BC04D4308E060D20000C0B3)
例1输出结果如下图所示。图1 例1遍历pub目录的输出结果
从例1的输出结果可以看出,listdir方法仅返回了文件名称,如果我们需要输出文件的整个路径,该如何处理呢?只需要使用os模块下的join方法连接遍历的目录路径和文件名称就可以了。修改例1的代码如下:
![](https://pics5.baidu.com/feed/b21c8701a18b87d640969b3319a0a33c1e30fd76.jpeg?token=59d4ac6d13f9963b6fe33cae8fec7b7b&s=ABBEAD0A13D04C63044420D20000D0B3)
执行上面的代码,输出结果如下图所示。
![](https://pics2.baidu.com/feed/b8014a90f603738d7050bd5badb33b55f919ecda.jpeg?token=a6e39ea05d0253bd39c47b066a5e256d&s=E598CC3B1D5EEEC81C5514DE0200D0B1)
从上图输出结果可以看出,pub目录下的所有文件以完整路径输出。但有一个问题,就是在pub目录下有doc子目录,该子目录下的文件并没有列出,下面我们将讨论当目录包含子目录时该如何处理?
当目录中有子目录时该如何处理?
在例1中要遍历的pub目录下面有doc子目录,例1的程序并没有列出doc子目录下的文件,我们现在希望也能遍历doc子目录下的文件。这时我们就要使用walk方法了,walk方法可以递归遍历目录下面的所有文件和子目录。
例2:使用walk递归遍历目录文件
例2中使用walk方法递归遍历目录文件,walk方法会返回一个三元组,分别是root、dirs和files。其中root是当前正在遍历的目录路径;dirs是一个列表,包含当前正在遍历的目录下所有的子目录名称,不包含该目录下的文件;files也是一个列表,包含当前正在遍历的目录下所有的文件,但不包含子目录。
![](https://pics6.baidu.com/feed/377adab44aed2e734f26102099a92a8f86d6fa18.jpeg?token=276a90f66b7e64db73ee5b713e33198b&s=ABA4A50A11C04D431C4028D2000050B3)
例2输出结果如下图所示。
![](https://pics4.baidu.com/feed/08f790529822720ea74f3cc765638142f31fabb3.jpeg?token=be844976484b4158a7f7eb65db5c65b9&s=E598CC3B0DDC4DC81E7DC0DE0200C0B3)
前面我们实现了在指定的目录中遍历所有文件,也包括子目录的遍历,下面我们来看看如何在指定的目录中搜索文件。
如何在指定的目录中搜索文件?
实现在指定的目录中搜索文件,主要实现思路是使用walk方法递归遍历要搜索的目录,在递归遍历过程中,使用for循环遍历walk方法返回的files列表,判断files列表中的文件名称是否和要搜索的文件名称相同,若相同就输出该文件。
例3:在指定的目录中搜索文件
例3使用walk方法递归遍历pub目录,使用walk方法主要是考虑到pub目录下有子目录,也需要在子目录中搜索文件。
![](https://pics4.baidu.com/feed/adaf2edda3cc7cd99cfcbeba27a9aa3bb90e9128.jpeg?token=1641ef011f5f7f29454bdc3e39f7bafc&s=2EBAAD0A1FC04C4110E931D30000C0B2)
现在我们已经掌握了使用listdir方法和walk方法遍历或递归遍历目录中的文件,也掌握了如何从目录中搜索文件。但是要编写资源管理程序,还得需要掌握Python函数和模块知识,以及Python用户界面的相关知识,后面会陆续介绍这些知识。