Python 过滤 os.walk() 目录和文件
在本文中,我们将介绍如何使用Python中的os.walk()函数遍历目录和文件,并通过过滤条件筛选出需要的目录和文件。
阅读更多:Python 教程
os.walk()函数简介
os.walk()函数是Python中用于遍历目录树的一个非常有用的函数。它能够递归地遍历目录下的所有子目录和文件,并返回每个目录下的子目录和文件。
os.walk()函数返回一个生成器(generator),每次生成器生成一个元组,包含三个元素:
- 当前遍历的目录路径
 - 当前遍历目录下的所有子目录列表
 - 当前遍历目录下的所有文件列表
 
我们可以使用for循环来遍历os.walk()函数生成的结果,对目录和文件进行处理。
下面是一个示例,展示如何使用os.walk()函数遍历目录和文件:
import os
root_dir = '/path/to/directory'
for dirpath, dirnames, filenames in os.walk(root_dir):
    print('当前目录路径:', dirpath)
    print('子目录列表:', dirnames)
    print('文件列表:', filenames)
过滤目录
有时候我们只需要遍历特定条件下的目录,可以通过在遍历过程中进行目录的筛选。
例如,我们只想遍历目录名不包含特定字符串的目录。可以使用以下代码实现:
import os
root_dir = '/path/to/directory'
exclude_dirs = ['exclude1', 'exclude2']
for dirpath, dirnames, filenames in os.walk(root_dir):
    # 过滤需要排除的目录
    dirnames[:] = [d for d in dirnames if d not in exclude_dirs]
    print('当前目录路径:', dirpath)
    print('子目录列表:', dirnames)
    print('文件列表:', filenames)
上述代码中,我们定义了一个列表exclude_dirs,包含需要排除的目录名称。在遍历过程中,通过列表推导式来过滤掉需要排除的目录,将不满足条件的目录从dirnames中删除。
过滤文件
类似地,我们也可以根据特定条件对文件进行筛选。比如只遍历指定扩展名的文件。
以下示例展示了如何只遍历.py后缀的文件:
import os
root_dir = '/path/to/directory'
extension = '.py'
for dirpath, dirnames, filenames in os.walk(root_dir):
    # 过滤扩展名不是.py的文件
    filenames[:] = [f for f in filenames if f.endswith(extension)]
    print('当前目录路径:', dirpath)
    print('子目录列表:', dirnames)
    print('文件列表:', filenames)
通过在遍历过程中判断文件名是否以指定扩展名结尾,来筛选出满足条件的文件。
过滤目录和文件
如果我们需要同时过滤目录和文件,可以通过组合上述的过滤方法来实现。
以下示例展示了如何同时排除特定目录和特定扩展名的文件:
import os
root_dir = '/path/to/directory'
exclude_dirs = ['exclude1', 'exclude2']
extension = '.py'
for dirpath, dirnames, filenames in os.walk(root_dir):
    # 过滤需要排除的目录
    dirnames[:] = [d for d in dirnames if d not in exclude_dirs]
    # 过滤扩展名不是.py的文件
    filenames[:] = [f for f in filenames if f.endswith(extension)]
    print('当前目录路径:', dirpath)
    print('子目录列表:', dirnames)
    print('文件列表:', filenames)
通过将两种过滤方法结合在一起,可以同时对目录和文件进行筛选。
总结
在本文中,我们介绍了如何使用Python中的os.walk()函数遍历目录和文件,并通过过滤条件筛选出需要的目录和文件。通过掌握这些技巧,你可以更灵活地处理目录和文件的遍历,提高程序的效率和可维护性。希望本文对你有所帮助!
极客教程