Python 如何递归扫描目录

Python 如何递归扫描目录

目录简单地定义为子目录和单个文件的集合;或者其中之一。目录层次结构是通过在主目录(也称为“根”目录)中组织所有文件和子目录来构建的。在目录层次结构中,这些子目录使用“/”运算符分隔。

由于目录以层次结构/树的形式组织,因此扫描目录可以类比于遍历树。为了做到这一点,有各种各样的方法。

  • 使用os.walk()方法

  • 使用glob.glob()方法

  • 使用os.listdir()方法

目录由操作系统处理;因此,每当需要对任何目录进行状态更新时,都需要使用os模块。

使用os.walk()方法

os.walk()函数通过自上而下或自下而上遍历目录树,在目录树中生成文件名。它返回一个三元组,每个目录生成一个:(路径,名称和文件名)

路径是一个表示目录路径的字符串。names变量包含path中不以“.”或“..”开头的子目录的名称列表。filenames变量包含path中非目录文件的名称列表。

示例

在这里,让我们使用os.walk()方法显示当前主目录中的所有文件和子目录。

import os
path = "."
for root, d_names, f_names in os.walk(path):
   print(root, d_names, f_names)

输出

让我们编译并运行上述程序,得到以下结果−

. [] ['main.py']

示例

我们还可以为每个文件创建完整路径。为此,我们必须使用os.path.join()方法。这个方法将为文件创建一个路径。可以使用append()方法将每个文件的路径添加在一起,如下所示。

import os
path = "./TEST"
fname = []
for root,d_names,f_names in os.walk(path):
   for f in f_names:
      fname.append(os.path.join(root, f))
print("fname = %s" %fname)

输出

上述程序的输出如下:

fname = []

示例

使用os.walk()方法,我们还可以选择要打印的返回值元组的哪个元素。让我们看一个如下的示例程序。

import os
for dirpath, dirs, files in os.walk("."):
   print(dirpath) # prints paths of all subdirectories present

for dirpath, dirs, files in os.walk("."):
   print(dirs) # prints the names of existing subdirectories

for dirpath, dirs, files in os.walk("."):
   print(files) # prints existing files in the current directory

输出

上述程序的输出如下 –

.
[]
['main.py']

使用glob.glob()方法

glob模块用于获取特定目录中与特定模式匹配的路径名。glob.glob()方法用于搜索包含给定路径规范的所有路径名作为参数。

如果将路径规范传递为“*”(星号),则该方法将在路径名中匹配零个或多个字符;因此,它返回目录中的所有文件。

示例

让我们尝试使用glob()方法打印根目录中所有文件和子目录的名称。示例如下所示。

from pathlib import Path

root_directory = Path('.')
size = 0
for f in root_directory.glob("*"):
   print(f)

输出

main.py

结论

我们讨论了如何使用os.walk()函数在Python中递归地扫描目录。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程