Python 3 – os.walk() 方法
Python 3 中的 os.walk() 方法是一个非常有用的函数,可以用于遍历目录树,获取目录下的所有文件和子目录。本文将详细介绍 os.walk() 方法的使用方法及其示例代码。
os.walk() 方法介绍
os.walk() 方法用于遍历一个目录树,获取目录下的所有文件和子目录。它返回一个生成器对象,可以通过 for 循环来遍历目录树,获取每个目录下的子目录和文件。每次遍历返回一个元组,包含当前目录的路径、当前目录下子目录的名字和当前目录下的文件名,如下:
for root, dirs, files in os.walk('.', topdown=True):
print(root, dirs, files)
其中,root
为当前目录的路径,dirs
为当前目录下的子目录名列表,files
为当前目录下的文件名列表。通过 os.walk()
方法的默认参数,还可以控制遍历顺序、包含或排除某些文件夹等。
os.walk() 方法示例
下面,我们通过几个示例来演示如何使用 os.walk() 方法。
示例 1:遍历当前目录下所有文件
下面是一个简单的示例,遍历当前目录下的所有文件,并输出文件路径。
import os
for root, dirs, files in os.walk('.', topdown=True):
for file in files:
print(os.path.join(root, file))
示例输出结果:
./test.txt
./subdir1/file2.txt
./subdir1/file1.txt
./subdir2/file4.txt
./subdir2/subdir3/file5.txt
./subdir2/file3.txt
./subdir2/file2.txt
./subdir2/file1.txt
示例 2:遍历指定目录下所有文件
通过参数 topdown=True
可以控制遍历顺序,默认为从上往下遍历,我们也可以指定从下往上遍历。下面一个例子演示了如何遍历指定目录下的文件,包括子目录。
import os
for root, dirs, files in os.walk('mydir', topdown=False):
for file in files:
print(os.path.join(root, file))
示例输出结果:
mydir/subdir1/file2.txt
mydir/subdir1/file1.txt
mydir/subdir2/file4.txt
mydir/subdir2/subdir3/file5.txt
mydir/subdir2/file3.txt
mydir/subdir2/file2.txt
mydir/subdir2/file1.txt
mydir/test.txt
示例 3:遍历目录树并筛选文件
通过在遍历的过程中进行文件筛选,我们可以快速的得到满足条件的文件。
下面一个例子演示了如何在遍历的过程中筛选出 “txt” 文件。
import os
for root, dirs, files in os.walk('.', topdown=True):
for file in files:
if file.endswith(".txt"):
print(os.path.join(root, file))
示例输出结果:
./test.txt
./subdir1/file2.txt
./subdir1/file1.txt
./subdir2/file4.txt
./subdir2/subdir3/file5.txt
./subdir2/file3.txt
./subdir2/file2.txt
./subdir2/file1.txt
示例 4:遍历目录树并创建目录
通过在遍历的过程中对目录进行判断和操作,我们可以快速的创建符合特定规则的目录。
下面一个例子演示了如何在遍历的过程中创建符合特定规则的目录。
import os
for root, dirs, files in os.walk('.', topdown=True):
for dir in dirs:
if "data" in dir:
os.makedirs(os.path.join(root, dir, "new_dir"))
示例输出结果:
# 创建目录完成后再次遍历目录
./data/new_dir
./data/subdir1/new_dir
./data/subdir1/subdir3/new_dir
./data/subdir2/new_dir
./data/subdir2/subdir3/new_dir
示例 5:排除指定文件夹的遍历
如果需要排除某些文件夹的遍历,可以通过在遍历的过程中移除指定目录。
下面一个例子演示了如何在遍历的过程中移除指定文件夹。
import os
exclude_dirs = ['subdir1', 'subdir3']
for root, dirs, files in os.walk('.', topdown=True):
# 移除指定文件夹
for dir in exclude_dirs:
if dir in dirs:
dirs.remove(dir)
for file in files:
print(os.path.join(root, file))
示例输出结果:
./test.txt
./subdir2/file4.txt
./subdir2/subdir3/file5.txt
./subdir2/file3.txt
./subdir2/file2.txt
./subdir2/file1.txt
./subdir2/new_file.txt
结论
os.walk() 方法是 Python 3 中用于遍历目录树的一个非常有用函数,可以用来查找和操作所有子目录和文件。通过遍历目录树,我们可以快速地获取目录结构和目录下的所有文件,并对目录树进行增、删、改等操作,使代码更加灵活、高效。