如何使用 `pathlib` 模块在 Python 中遍历目录?

问题描述 投票:0回答:1

我正在尝试使用 pathlib 模块在 Python 中实现目录遍历。以前,我使用 os.walk 来完成这个任务,它返回三个值的元组——当前目录路径、所有子目录的列表和所有文件的列表。这是我使用

os.walk
遍历目录的代码:

import os

for root, dirs, files in os.walk('/path/to/directory'):
    print(f'Current directory: {root}')
    print(f'All subdirectories: {dirs}')
    print(f'All files: {files}')

然而,我惊讶地发现,使用高级

pathlib
实现类似的结果并不那么简单。虽然有一些已知的方法可以使用
pathlib
遍历目录,但即使是通常建议的使用
pathlib.glob()
的解决方案也不会返回与
os.walk
相同的结果格式。根据我的研究,似乎在
os.walk
中没有直接等同于
pathlib
的东西。虽然有一些已知的方法可以使用 pathlib 遍历目录,但这些结果并不像使用
os.walk
.

获得的结果那么简单

任何人都可以指导我如何在 Python 中使用

pathlib
遍历目录并获得与
os.walk
类似的结果吗?我希望获得所有子目录的列表和每个目录中所有文件的列表,以及当前目录路径。

python path
1个回答
1
投票

您可以使用 pathlib 实现与 os.walk 类似的结果,方法是使用

iterdir()
对象的
Path
方法递归迭代目录的内容。

下面是一个使用pathlib遍历目录并返回每个目录下所有子目录和文件的列表,以及当前目录路径的示例实现:

from pathlib import Path
    def traverse_directory(path):
    # Convert input path to Path object
    path = Path(path)

    # Initialize lists for directories and files
    dirs = []
    files = []

    # Iterate over contents of directory
    for item in path.iterdir():

        # Check if item is a directory
        if item.is_dir():
            # Append directory name to list
            dirs.append(item.name)

            # Recursively call function on subdirectory and append results
            result = traverse_directory(item)
            dirs += result[0]
            files += result[1]

        # Check if item is a file
        elif item.is_file():
            # Append file name to list
            files.append(item.name)

    # Return list of directories, files, and current path
    return [dirs, files, str(path)]

# Example usage
result = traverse_directory('/path/to/directory')
print(f'Current directory: {result[2]}')
print(f'All subdirectories: {result[0]}')
print(f'All files: {result[1]}')

在此实现中,

traverse_directory()
函数使用
iterdir()
对象的
Path
方法递归迭代目录的内容。如果该项目是一个子目录,该函数会在子目录上调用自身并将结果附加到目录和文件列表中。如果该项目是一个文件,它的名字只是附加到文件列表。

© www.soinside.com 2019 - 2024. All rights reserved.