📅  最后修改于: 2023-12-03 15:04:33.924000             🧑  作者: Mango
在 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()
还可以用于很多高级用法,例如:
筛选特定类型的文件
import os
for root, dirs, files in os.walk("."):
for name in files:
if name.endswith(".txt"):
print(os.path.join(root, name))
输出结果是当前目录及其子目录下所有以 .txt
后缀结尾的文件路径。
应用于目录树的懒惰计算
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)
输出结果和基本示例相同,但是它支持懒惰计算,只有在需要的时候才生成路径列表。
修改文件和目录名
使用 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_
开头的名字。
处理错误
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 编程带来很大的便捷。