如何在 Python 中列出目录中的所有文件?
在许多文件处理操作中,列出目录中所有文件的需求是 Python 中常见的场景,而且非常简单。Python 提供了一个实用的模块 os,它提供与操作系统、目录和文件无缝协作的功能。我们将介绍使用实用代码示例列出目录中所有文件的不同策略和方法,并附带详细解释,以帮助您理解其背后的概念。
使用 os.listdir() 列出文件
要列出目录中的所有文件,可以使用 os.listdir() 函数。让我们通过一个代码示例逐步讲解。
示例
在这个例子中,我们首先导入 os 模块。list_files_in_directory() 函数以 directory_path 作为参数,您可以在其中指定要列出文件的目录的路径。
使用 os.listdir(directory_path),我们得到指定目录中所有文件和目录的列表。然后,我们通过使用 os.path.isfile() 检查每个元素的存在来过滤掉此列表中的所有目录。
最后,函数返回在目录中找到的文件列表。如果目录不存在,我们将处理 FileNotFoundError 并打印错误消息。
使用这段代码片段,您可以轻松地使用 Python 列出目录中的所有文件,简化您的文件管理任务,并使您的编码体验更加愉快。
import os
def list_files_in_directory(directory_path):
try:
# Use os.listdir() to get a list of all files in the directory
files_list = os.listdir(directory_path)
# Filter out directories from the list, keeping only files
files_list = [file for file in files_list if os.path.
isfile(os.path.join(directory_path, file))]
return files_list
except FileNotFoundError:
print(f"Error: The directory '{directory_path}'
does not exist.")
return []
# Replace 'directory_path' with the path of the
directory you want to list files from
directory_path = '/path/to/your/directory'
files_in_directory = list_files_in_directory(directory_path)
if files_in_directory:
print("Files in the directory:")
for file_name in files_in_directory:
print(file_name)
else:
print("No files found in the directory.")
输出
对于某个目录,以下是输出结果
Files in the directory: baz.txt bar.txt
使用 os.listdir() 列出文件
示例
我们首先导入 os 模块,它提供了一些有用的函数和方法。
list_files_in_directory() 函数接受 directory_path 作为参数。directory_path 代表目标目录的路径。
通过使用 os.listdir(directory_path) 函数获取目标目录中所有文件和目录的列表。
我们迭代每个项目,并使用 os.path.isfile() 检查它是否是文件;我们只检索文件并将它们加载到 files_list 中。
如果特定目录不存在,则捕获 FileNotFoundError 并显示错误消息。
import os
def list_files_in_directory(directory_path):
try:
# Get a list of all files and directories
in the specified directory
all_items = os.listdir(directory_path)
# Filter out only the files from the list
files_list = [item for item in all_items if
os.path.isfile(os.path.join(directory_path, item))]
return files_list
except FileNotFoundError:
print(f"Error: The directory '{directory_path}'
does not exist.")
return []
# Replace 'directory_path' with the path of the directory you want to list files from
directory_path = '/path/to/your/directory'
files_in_directory = list_files_in_directory(directory_path)
if files_in_directory:
print("Files in the directory:")
for file_name in files_in_directory:
print(file_name)
else:
print("No files found in the directory.")
输出
对于某个目录,以下是输出结果
Files in the directory: baz bar
使用 os.scandir() 进行高效列出
示例
在这个例子中,os.listdir() 被 os.scandir() 替换,以实现更高效的目录文件列出。
通过使用 os.scandir(directory_path),我们高效地迭代目录条目;之后无需显式关闭目录。
使用 entry.is_file() 检查 entries 中的每个条目是否为文件;如果发现条目是文件,我们将它的名称添加到 files_list 中。
如前所述,我们使用相应的错误消息通知 FileNotFoundError 的发生。
import os
def list_files_in_directory(directory_path):
try:
# Use os.scandir() for a more efficient listing
with os.scandir(directory_path) as entries:
files_list = [entry.name for entry in
entries if entry.is_file()]
return files_list
except FileNotFoundError:
print(f"Error: The directory '{directory_path}'
does not exist.")
return []
# Replace 'directory_path' with the path of
the directory you want to list files from
directory_path = '/path/to/your/directory'
files_in_directory = list_files_in_directory(directory_path)
if files_in_directory:
print("Files in the directory:")
for file_name in files_in_directory:
print(file_name)
else:
print("No files found in the directory.")
输出
对于某个目录,以下是输出结果
Files in the directory: baz bar
使用 os.walk() 进行递归列出
示例
在这个例子中,我们使用 os.walk() 来递归列出子目录中的文件。
os.walk(directory_path) 函数输出一个生成器,其中包含包含根目录、子目录和该目录中文件的元组。
对每个元组进行迭代,并为 files 列表中的每个文件使用 os.path.join() 创建完整的 文件路径,并将文件添加到 files_list 中。
这使我们能够获取所有文件的完整列表,包括子目录中的文件。
import os
def list_files_in_directory(directory_path):
try:
# Use os.walk() to get a recursive listing of all files
files_list = []
for root, dirs, files in os.walk(directory_path):
for file in files:
files_list.append(os.path.join(root, file))
return files_list
except FileNotFoundError:
print(f"Error: The directory '{directory_path}'
does not exist.")
return []
# Replace 'directory_path' with the path of
the directory you want to list files from
directory_path = '/path/to/your/directory'
files_in_directory = list_files_in_directory(directory_path)
if files_in_directory:
print("Files in the directory:")
for file_name in files_in_directory:
print(file_name)
else:
print("No files found in the directory.")
输出
对于某个目录,以下是输出结果
Files in the directory: /content/foo/baz /content/foo/bar
使用 pathlib.Path() 进行现代化列出
示例
在这个最终示例中,我们利用 pathlib.Path() 的强大功能来在 Python 中进行高速文件列出。
pathlib.Path(directory_path) 帮助创建 Path 对象;这允许我们处理目录及其内容。
我们使用 path.iterdir() 获取所有目录条目的迭代器,即文件和目录。
使用 file.is_file(),我们确保检查每个条目是否为文件,如果是,则提取其名称并将其添加到 files_list 中。
from pathlib import Path
def list_files_in_directory(directory_path):
try:
# Use pathlib.Path() for modern file listing
path = Path(directory_path)
files_list = [file.name for file in path.iterdir() if file.is_file()]
return files_list
except FileNotFoundError:
print(f"Error: The directory '{directory_path}' does not exist.")
return []
# Replace 'directory_path' with the path of the directory you want to list files from
directory_path = '/path/to/your/directory'
files_in_directory = list_files_in_directory(directory_path)
if files_in_directory:
print("Files in the directory:")
for file_name in files_in_directory:
print(file_name)
else:
print("No files found in the directory.")
输出
对于某个目录,以下是输出结果
Files in the directory: baz bar
借助这四个代码示例及其解释,您现在可以使用 Python 列出目录中的文件,无论您选择使用 os.listdir() 的常规方法、使用 os.scandir() 进行更高效的列出、使用 os.walk() 进行递归搜索,还是使用 pathlib.Path() 的尖端方法,Python 都提供大量选项来满足您的特定需求。
总而言之,列出目录中文件的能力和技巧是一个宝贵的工具,它简化了文件管理任务并增强了代码组织。Python 的灵活性和各种工具使我们能够轻松浏览目录并提取我们所需的信息。在您继续您的 Python 之旅时,您应该不断磨练您的技能并探索这种多功能语言的无限可能性。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP