📜  Python中的 os.walk()(1)

📅  最后修改于: 2023-12-03 15:04:33.924000             🧑  作者: Mango

Python中的 os.walk()

在 Python 中,os.walk() 是一个非常强大的文件和目录遍历工具。使用它,可以轻松地迭代文件和目录,查看其中的内容,或对它们进行操作。

语法
os.walk(top, topdown=True, onerror=None, followlinks=False)

其中:

  • top:需要遍历的目录路径
  • topdown:是否先遍历 top 目录,再遍历其子目录。默认为 True
  • onerror:当遇到错误时的处理方法,默认为 None
  • followlinks:是否跟随符号链接。默认为 False
返回值

os.walk() 函数的返回值是一个三元组,分别是:当前目录路径,当前目录下的所有子目录名(包括路径),当前目录下的所有文件名(包括路径)。

代码示例

以下是一个基本的 os.walk() 使用示例,它遍历了当前目录下的所有子目录和文件,并输出它们的路径:

import os

for root, dirs, files in os.walk("."):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))

输出结果类似于:

./file1.txt
./file2.txt
./dir1
./dir2
./dir1/file3.txt
./dir2/file4.txt
高级用法

除了基本的遍历外,os.walk() 还可以用于很多高级用法,例如:

  1. 筛选特定类型的文件

    import os
    
    for root, dirs, files in os.walk("."):
        for name in files:
            if name.endswith(".txt"):
                print(os.path.join(root, name))
    

    输出结果是当前目录及其子目录下所有以 .txt 后缀结尾的文件路径。

  2. 应用于目录树的懒惰计算

    os.walk() 返回的是一个迭代器,因此可以将它应用于目录树的懒惰计算,只在需要的时候才进行遍历。例如:

    import os
    
    def lazy_walk(path):
        for root, dirs, files in os.walk(path):
            yield root
            for file in files:
                yield os.path.join(root, file)
    
    for item in lazy_walk("."):
        print(item)
    

    输出结果和基本示例相同,但是它支持懒惰计算,只有在需要的时候才生成路径列表。

  3. 修改文件和目录名

    使用 os.walk(),可以很方便地批量修改文件和目录名。例如:

    import os
    
    for root, dirs, files in os.walk("."):
        for name in dirs + files:
            if name.startswith("old_"):
                newname = name.replace("old_", "new_")
                os.rename(os.path.join(root, name), os.path.join(root, newname))
    

    这段代码会将当前目录及其子目录下所有以 old_ 开头的文件和目录名修改为以 new_ 开头的名字。

  4. 处理错误

    os.walk() 还提供了一个 onerror 参数,当遇到错误时会调用指定的错误处理函数。例如:

    import os
    
    

def handle_error(error): print(f"发生了一个错误:{error}")

for root, dirs, files in os.walk(".", onerror=handle_error): for name in files: print(os.path.join(root, name)) for name in dirs: print(os.path.join(root, name))


这段代码也会打印出当前目录及其子目录下的所有文件和目录路径,但是它还会调用一个错误处理函数 `handle_error`,来处理在遍历目录树时遇到的错误。

## 总结

`os.walk()` 是 Python 中一个非常强大的目录遍历工具,它可以方便地遍历文件和目录,处理文件和目录的增、删、改、查等操作。它支持高级用法,例如处理错误、懒惰计算、筛选特定类型的文件等。熟练掌握 `os.walk()` 的使用方法,可以为 Python 编程带来很大的便捷。