您的位置:

Python中os.walk()函数的使用方法

介绍

在Python中,os.walk()函数是一个非常有用的工具,可以用于遍历指定目录以及其子目录中的所有文件和文件夹。该函数返回一个迭代器,可以枚举目录树中的每个目录和文件。

正文

一、基础使用方法

os.walk()函数的基础使用非常简单,只需要提供一个起始目录作为参数即可:

import os

# 遍历指定目录以及子目录中所有文件和文件夹
for root, dirs, files in os.walk('my_directory'):
    # 打印当前目录路径
    print(root)
    # 打印当前目录下的所有子目录
    for directory in dirs:
        print(os.path.join(root, directory))
    # 打印当前目录下的所有文件
    for file in files:
        print(os.path.join(root, file))

在上述代码中,os.walk()函数遍历了'my_directory'目录以及其子目录的所有文件和文件夹。通过遍历时返回的root、dirs、files参数,我们可以获取当前目录的路径,该目录下的所有子目录,以及该目录下的所有文件。

二、指定深度

有时候,我们不想遍历整个目录树,而只对目录树的一部分进行遍历。在这种情况下,我们可以使用os.walk()函数的depth参数来指定遍历的深度。

import os

# 遍历指定目录以及子目录中所有文件和文件夹,最大深度为2
for root, dirs, files in os.walk('my_directory', depth=2):
    # 打印当前目录路径
    print(root)
    # 打印当前目录下的所有子目录
    for directory in dirs:
        print(os.path.join(root, directory))
    # 打印当前目录下的所有文件
    for file in files:
        print(os.path.join(root, file))

在上述代码中,我们通过将depth参数设置为2,限制了遍历的深度。这样,os.walk()函数将只遍历'my_directory'目录以及其直接子目录的所有文件和文件夹。

三、忽略特定目录或文件

有时候,我们需要遍历特定目录和文件,而忽略其他的部分。在这种情况下,我们可以使用os.walk()函数的topdown和onerror参数来实现。

import os

# 忽略'my_directory/subdir'目录以及所有txt文件
for root, dirs, files in os.walk('my_directory', topdown=True, onerror=None):
    # 从dirs中删除'subdir'目录
    if 'subdir' in dirs:
        dirs.remove('subdir')
    # 忽略当前目录下的所有txt文件
    files = [f for f in files if not f.endswith('.txt')]
    # 打印当前目录路径
    print(root)
    # 打印当前目录下的所有子目录
    for directory in dirs:
        print(os.path.join(root, directory))
    # 打印当前目录下的所有文件
    for file in files:
        print(os.path.join(root, file))

在上述代码中,我们通过设置topdown参数为True以及onerror参数为None来忽略指定的目录和文件。在遍历到'my_directory/subdir'目录时,我们从dirs中删除了该目录,相当于忽略了该目录。同时,在遍历到某个目录下的文件时,我们使用了文件过滤条件,将所有以'.txt'结尾的文件忽略掉。

小结

os.walk()函数是Python中非常有用的一个函数,可以用于遍历指定目录以及子目录中的所有文件和文件夹。通过使用depth、topdown和onerror参数,我们可以实现更加精确和定制化的遍历。