Python 获取指定文件夹下所有文件及子目录文件的方法详解210


在Python编程中,经常需要处理文件系统中的文件,例如读取、写入、修改或删除文件。而获取指定文件夹下所有文件,包括子目录中的文件,是一个非常常见的需求。本文将详细介绍几种方法来实现这一目标,并比较它们各自的优缺点,帮助你选择最适合你场景的方法。

最基本的方法是使用()函数,它可以列出指定目录下所有文件和子目录的名称。然而,()只能列出当前目录下的内容,无法递归地遍历子目录。为了实现递归遍历,我们需要结合()函数或pathlib模块。

方法一:使用()函数

()函数是遍历目录树的最佳选择。它会生成一个三元组:(dirpath, dirnames, filenames),其中:
dirpath: 当前目录的路径。
dirnames: 当前目录下所有子目录的名称列表。
filenames: 当前目录下所有文件的名称列表。

以下代码演示如何使用()函数获取指定文件夹下所有文件:```python
import os
def get_all_files(directory):
"""
获取指定目录下所有文件,包括子目录中的文件。
Args:
directory: 目录路径。
Returns:
一个包含所有文件绝对路径的列表。
"""
all_files = []
for dirpath, dirnames, filenames in (directory):
for filename in filenames:
filepath = (dirpath, filename)
(filepath)
return all_files
if __name__ == "__main__":
target_directory = "/path/to/your/directory" # 请替换成你的目标目录
files = get_all_files(target_directory)
for file in files:
print(file)
```

请记住将"/path/to/your/directory"替换成你的实际目标目录路径。 这段代码首先定义了一个名为get_all_files的函数,该函数接受目标目录路径作为参数,并使用递归遍历目录树。 在每个目录中,它将所有文件的路径添加到all_files列表中,最后返回该列表。

方法二:使用pathlib模块

pathlib模块是Python 3.4中引入的一个更现代化的文件系统路径处理模块,它提供了一种更面向对象的方式来处理文件和目录。使用pathlib可以使代码更简洁易读。```python
from pathlib import Path
def get_all_files_pathlib(directory):
"""
使用 pathlib 模块获取指定目录下所有文件,包括子目录中的文件。
Args:
directory: 目录路径。
Returns:
一个包含所有文件 Path 对象的列表。
"""
all_files = []
for file_path in Path(directory).rglob('*'):
if file_path.is_file():
(file_path)
return all_files
if __name__ == "__main__":
target_directory = "/path/to/your/directory" # 请替换成你的目标目录
files = get_all_files_pathlib(target_directory)
for file in files:
print(file)
```

这段代码使用Path(directory).rglob('*')递归地查找所有文件。rglob('*')会匹配所有文件和子目录,然后is_file()方法可以过滤掉目录,只保留文件。

方法三:处理特殊字符和错误

在实际应用中,文件名可能包含特殊字符,或者目标目录可能不存在。我们需要添加错误处理机制来提高代码的健壮性。```python
import os
import pathlib
def get_all_files_robust(directory):
try:
# 使用pathlib,更健壮的处理方式
return list((directory).rglob('*'))
except FileNotFoundError:
print(f"Error: Directory '{directory}' not found.")
return []
except Exception as e:
print(f"An error occurred: {e}")
return []
if __name__ == "__main__":
target_directory = "/path/to/your/directory"
files = get_all_files_robust(target_directory)
for file in files:
print(file)
```

这段代码使用了try...except块来捕获FileNotFoundError和其它异常,并打印错误信息。 使用pathlib也能够更优雅地处理潜在的路径问题。

本文介绍了三种获取Python指定文件夹下所有文件的方法,包括使用()、pathlib以及添加错误处理。pathlib方法通常被认为更简洁,更易读,并且更能处理各种路径相关的异常情况。 选择哪种方法取决于你的项目需求和个人偏好,但建议优先考虑pathlib方法,因为它更加现代化且更具可读性。

记住始终替换"/path/to/your/directory"为你的实际目录路径。 在运行代码之前,请确保你拥有目标目录的读取权限。

2025-06-12


上一篇:Python文件目录遍历:高效方法与进阶技巧

下一篇:深入理解Python对象和函数:方法、绑定和闭包