📜  python find dir (1)

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

Python 查找目录

在 Python 编程中,有时需要查找指定路径下的所有子目录和文件。本文介绍几种方法,帮助你完成这个任务。

使用 os.walk()

os.walk() 是 Python 的标准函数之一,它可以生成一个目录树下的所有文件名。你可以通过递归地遍历这个树,找到指定目录下的所有文件和文件夹。以下是一个示例代码:

import os

root_dir = '/path/to/directory'

for root, dirs, files in os.walk(root_dir):
    for name in files:
        print(os.path.join(root, name)) # 打印出所有文件
    for name in dirs:
        print(os.path.join(root, name)) # 打印出所有目录

os.walk() 函数返回一个三元组 (dirpath, dirnames, filenames),其中:

  • dirpath 是一个字符串,表示正在处理的目录的路径
  • dirnames 是一个包含目录名字的字符串列表
  • filenames 是一个包含非目录文件名的字符串列表
使用 pathlib.Path.glob()

在 Python 3.4 中引入的 pathlib 模块,提供了一种更优雅的方式来管理文件路径。使用 Path 可以轻松地表示和操作文件路径、目录和文件。

Path.glob() 方法可以返回指定目录下所有符合特定模式的文件路径。下面是一个使用 pathlib 的示例代码:

from pathlib import Path

root_dir = Path('/path/to/directory')

for path in root_dir.glob('**/*'):
    print(path)

Path.glob() 方法返回一个生成器,遍历指定目录下的所有子目录和文件,用了 '**' 模式来匹配任意数目的子目录。如果只想匹配一级子目录,可以使用 '*' 模式。

使用 os.listdir() 和 os.path.isdir()

如果你没用使用 pathlib 模块,Python 标准库中的 os 模块也提供了一些基本的方法来操作文件路径和目录。os.listdir() 方法返回指定目录下的所有文件和子目录的名称列表。

你可以通过遍历这个列表来递归地查找目录树。下面是一个示例代码:

import os

root_dir = '/path/to/directory'

def list_files_dirs(root):
    for item in os.listdir(root):
        full_path = os.path.join(root, item)
        if os.path.isdir(full_path):
            print(full_path) # 打印出所有目录
            list_files_dirs(full_path)
        else:
            print(full_path) # 打印出所有文件

list_files_dirs(root_dir)

其中,os.path.isdir() 方法用来判断一个路径是不是目录。

总结

Python 提供了多种方式来查找指定目录下的所有文件和目录。os.walk()pathlib.Path.glob()os.listdir() 都是非常常用的方法。不同的方法有不同的优缺点,可以根据具体的需求来选择合适的方法。