Logo

郎哥编程

目录遍历及文件搜索

2020-12-29 153

前面已经掌握了目录的创建、修改和删除方法,但是要开发文件资源管理器程序,仅有这些知识还是不够的。还有下面的问题需要解决:如何遍历目录中所有的文件?如何在目录中搜索到指定的文件?当目录中有子目录时该如何处理?

如何遍历目录中所有的文件?

遍历就是对目录中的所有文件按顺序逐个访问。例如程序要求列出某个目录中所有的文件名称,我们就需要访问这个目录中所有的文件并获取文件的名称,然后将获取的文件名称输出到屏幕上。

如何遍历目录中所有的文件呢?Python语言的OS模块为我们提供了两个列出目录中所有文件的方法:

16.PNG

案例1:使用listdir遍历目录文件

案例1使用OS模块的listdir方法遍历D盘盘符下的pub目录,listdir返回一个列表,列表包含pub目录下所有文件名称,然后使用for循环输出列表。

#导入OS模块
import os
#待遍历的目录路径
path = "d:/pub"
#调用listdir方法遍历path目录
dirs = os.listdir(path)
# 输出所有文件和文件夹
for file in dirs:
    print(file)

在案例1的输出内容中,doc是目录,其它是文件。listdir方法仅返回了文件名称,如果需要输出文件的整个路径,该如何处理呢?只需要使用os模块下的join方法连接遍历的目录路径和文件名称就可以了。修改例1的代码如下:

#遍历目录样例文件
#导入OS模块
import os
#待遍历的目录路径
path = "d:/pub/"
#调用listdir方法遍历path目录
dirs = os.listdir(path)
# 输出所有文件和文件夹
for file in dirs:
    print(os.path.join(path,file))

从输出结果可以看出,pub目录下的所有文件以完整路径输出。但有一个问题,就是在pub目录下有doc子目录,该子目录下的文件并没有列出,下面讨论当目录包含子目录时该如何处理?

当目录中有子目录时该如何处理?

案例1要遍历的pub目录下面有doc子目录,但案例1的程序并没有列出doc子目录下的文件,现在希望也能遍历doc子目录下的文件。这时就要使用walk方法了,walk方法可以递归遍历目录下面的所有文件和子目录。

例2:使用walk递归遍历目录文件

#递归遍历目录样例文件
#导入OS模块
import os
#待遍历的目录路径
path = "d:/pub/"
#调用walk方法递归遍历path目录
for root, dirs, files in os.walk(path):
  for name in files:
     print(os.path.join(root, name))
  for name in dirs:
     print(os.path.join(root, name))

案例2中使用walk方法遍历pub目录下的所有文件及子目录,walk方法是一个生成器方法,它返回一个生成器类型的迭代器。

迭代器中的元素是一个具有三个元素的元组,分别是root、dirs和files。其中root是当前正在遍历的目录路径;dirs是一个列表,包含当前正在遍历的目录下所有的子目录名称,不包含该目录下的文件;files也是一个列表,包含当前正在遍历的目录下所有的文件,但不包含子目录。

前面实现了在指定的目录中遍历所有文件,也包括子目录的遍历,下面来看看如何在指定的目录中搜索文件。

如何在指定的目录中搜索文件?

在指定的目录中搜索文件,主要实现思路是使用walk方法遍历要搜索的目录及其子目录下的所有文件,在遍历过程中,使用for循环遍历walk方法返回的files列表,判断files列表中的文件名称是否和要搜索的文件名称相同,若相同就输出该文件。

例3:在指定的目录中搜索文件

案例3使用walk方法遍历pub目录,使用walk方法主要是考虑到pub目录下有子目录,也需要在子目录中搜索文件。

#在指定目录中搜索文件
#导入OS模块
import os
#待搜索的目录路径
path = "d:/pub/"
#待搜索的文件名
filename = "newsample.jpg"
#调用walk方法递归遍历path目录
for root, dirs, files in os.walk(path):
  for name in files:
    if( filename == name ):
      print(os.path.join(root, name))

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论