我正在尝试使用 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
类似的结果吗?我希望获得所有子目录的列表和每个目录中所有文件的列表,以及当前目录路径。
您可以使用 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
方法递归迭代目录的内容。如果该项目是一个子目录,该函数会在子目录上调用自身并将结果附加到目录和文件列表中。如果该项目是一个文件,它的名字只是附加到文件列表。