如何在 Python 中查找目录中扩展名为 .txt 的所有文件?
使用 Python 中的工具可以轻松完成目录中的特定文件搜索任务;在某些情况下,您可能需要使用 Python 查找目录中扩展名为 .txt 的所有文件。让我们深入了解此任务所涉及的过程,并通过易于理解的代码示例和说明向您展示如何通过不同的方式完成查找目录中扩展名为 .txt 的所有文件的任务。
使用 os.listdir()
在此代码示例中,我们首先导入 os 模块,这对于在 Python 中处理目录和文件至关重要。
示例
find_txt_files() 函数以 directory_path 作为其参数; directory_path 表示您要搜索的目录的路径。
我们使用 os.listdir(directory_path) 获取所有项目的列表,即指定目录中的文件和目录。
通过对每个项目进行迭代并使用 os.path.isfile() 检查它是否是文件,我们确保只考虑文件而不考虑目录。
在第二个条件中,我们使用 item.endswith('.txt') 仅检索扩展名为 .txt 的文件。
该函数提供在目录中找到的文本文件列表作为输出。
import os def find_txt_files(directory_path): try: # 使用 os.listdir() 获取目录中所有项目的列表 all_items = os.listdir(directory_path) # 仅过滤出扩展名为 '.txt' 的文件 txt_files = [item for item in all_items if os.path.isfile(os.path.join(directory_path, item)) and item.endswith('.txt')] return txt_files except FileNotFoundError: print(f"Error: The directory '{directory_path}' does not exist.") return [] # 将"directory_path"替换为你想要的目录的路径 search directory_path = '/path/to/your/directory' txt_files_list = find_txt_files(directory_path) if txt_files_list: print("目录中的文本文件:") for file_name in txt_files_list: print(file_name) else: print("目录中未找到 .txt 文件。")
输出
对于某个目录,获得以下输出
目录中的文本文件: fubar.txt
使用 os.listdir()
示例
在此示例中,我们首先导入 os 模块,这使我们能够与操作系统、目录和文件进行交互。
find_txt_files() 函数接受 directory_path 作为其参数。 directory_path 表示您希望搜索 .txt 文件的目录的路径。
部署 os.listdir(directory_path) 函数以获取所有项目的列表,即指定目录中的文件和目录。
通过迭代每个项目并使用 os.path.isfile() 检查它是否是文件,我们确保只考虑文件而忽略目录。
在第二个实例中,我们部署 item.endswith('.txt') 以仅查找具有 .txt 扩展名的文件。
发现该函数返回在目录中找到的 .txt 文件列表。
import os def find_txt_files(directory_path): try: # 获取指定目录中所有项目(文件和目录)的列表 all_items = os.listdir(directory_path) # 仅过滤出扩展名为 '.txt' 的文件 txt_files = [item for item in all_items if os.path.isfile(os.path.join(directory_path, item)) and item.endswith('.txt')] return txt_files except FileNotFoundError: print(f"Error: 目录 '{directory_path}' 不存在。") return [] # 将 'directory_path' 替换为您要搜索的目录的路径 directory_path = '/path/to/your/directory' txt_files_list = find_txt_files(directory_path) if txt_files_list: print("目录中的文本文件:") for file_name in txt_files_list: print(file_name) else: print("目录中未找到 .txt 文件。")
输出
对于某个目录,获得以下输出
目录中的文本文件: fubar.txt
使用 os.scandir() 提高效率
示例
此处,os.listdir() 被 os.scandir() 替换,以提供更高效的方式来列出目录中的文件。
当 os.scandir(directory_path) 的输出用作条目列表时,会创建一个上下文管理器,该管理器可以高效地遍历目录条目,无需显式然后关闭目录。
通过使用 entry.is_file(),检查每个条目是否是文件,如果发现是文件,我们继续检查它是否以 .txt 结尾。
发现该函数返回目录中找到的 .txt 文件列表。
import os def find_txt_files(directory_path): try: # 使用 os.scandir() 获得更高效的列表 with os.scandir(directory_path) as entries: txt_files = [entry.name for entry in entries if entry.is_file() and entry.name.endswith('.txt')] return txt_files except FileNotFoundError: print(f"Error: The directory '{directory_path}' does not exist.") return [] # 将 'directory_path' 替换为您要搜索的目录的路径 directory_path = '/path/to/your/directory' txt_files_list = find_txt_files(directory_path) if txt_files_list: print("目录中的文本文件:") for file_name in txt_files_list: print(file_name) else: print("目录中未找到 .txt 文件。")
输出
对于某个目录,获得以下输出
目录中的文本文件: fubar.txt
使用 os.walk() 进行递归搜索
示例
在此特定示例中,我们使用 os.walk() 实现对 .txt 文件的递归搜索,其中包括子目录。
然后 os.walk(directory_path) 函数返回一个生成器,该生成器继续提供包含根目录、子目录和该目录中的文件的元组。
每个元组都经过迭代,对于文件列表中的每个文件,我们部署 file.endswith('.txt') 来查找它是否以 .txt 扩展名结尾。
如果它确实以该扩展名结尾,我们使用 os.path.join(root, file) 构造完整的文件路径,并将该文件添加到 txt_files 列表中。
该函数最终返回在目录及其子目录中找到的 .txt 文件的完整列表。
import os def find_txt_files(directory_path): try: # 使用 os.walk() 获取所有文件的递归列表 txt_files = [] for root, dirs, files in os.walk(directory_path): for file in files: if file.endswith('.txt'): txt_files.append(os.path.join(root, file)) return txt_files except FileNotFoundError: print(f"Error: The directory '{directory_path}' does not exist.") return [] # 将 'directory_path' 替换为您要搜索的目录的路径 directory_path = '/path/to/your/directory' txt_files_list = find_txt_files(directory_path) if txt_files_list: print("目录中的文本文件:") for file_name in txt_files_list: print(file_name) else: print("目录中未找到 .txt 文件。")
输出
对于某个目录,获得了以下输出
目录中的文本文件: /content/foo/fubar.txt
使用 pathlib.Path() 进行现代列表
示例
在这个最后的例子中,我们采用最新的现代方法来执行相同的列表任务,方法是使用pathlib.Path()。
我们首先从 pathlib 模块导入 Path;该模块提供了一个面向对象的接口,用于处理目录和文件。
Path(directory_path) 指向指定的目录,从而创建一个 Path 对象。
使用 path.iterdir() 创建包含文件和目录的所有条目的迭代器,以在目录中获取相同的条目。
file.is_file() 函数用于检查每个条目是否是文件,如果确实是文件,我们使用 file.suffix 检查它是否具有 .txt 后缀。
如果满足所有这些条件,则将该文件包含在 txt_files 列表中。
然后发现该函数返回目录中找到的 .txt 文件列表。
from pathlib import Path def find_txt_files(directory_path): try: # 使用 pathlib.Path() 来列出现代文件 path = Path(directory_path) txt_files = [file for file in path.iterdir() if file.is_file() and file.suffix == '.txt'] return txt_files except FileNotFoundError: print(f"Error: The directory '{directory_path}' does not exist.") return [] # 将 'directory_path' 替换为您要搜索的目录的路径 directory_path = '/path/to/your/directory' txt_files_list = find_txt_files(directory_path) if txt_files_list: print("目录中的文本文件:") for file_name in txt_files_list: print(file_name) else: print("目录中未找到 .txt 文件。")
输出
对于某个目录,获得以下输出
目录中的文本文件: /content/foo/fubar.txt
这就是您说出的,您拥有的——使用 Python 在目录中查找所有带有 .txt 扩展名的文件的四种不同且有效的方法。您始终可以选择一种或多种方法,例如经典的 os.listdir()、高效的 os.scandir()、递归的 os.walk() 或现代的 pathlib.Path(),以满足您的特定需求。学习了这些代码示例和说明后,您现在拥有一个多功能工具包,可以自动执行文件搜索并优雅轻松地组织您的 Python 项目。
通过练习这些简洁优雅的代码片段,您可以毫不费力地在任何目录中找到所有带有 .txt 扩展名的文件。Python 的多功能性和易用性使其成为处理与文件相关的任务的绝佳选择,无论您是管理数据、组织文件还是处理文本文件进行分析。