如何在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

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

使用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学习之旅时,您应该不断磨练您的技能并探索这种多功能语言的无限可能性。

更新于:2023年7月28日

665 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告