以下是几种使用Python获取给定目录下所有文件的方法:
方法一:使用 os.listdir()
import os def get_files_in_directory(directory): """获取指定目录下的所有文件(不包含子目录)""" files = [] for item in os.listdir(directory): item_path = os.path.join(directory, item) if os.path.isfile(item_path): files.append(item_path) return files # 使用示例 directory_path = "/path/to/your/directory" files = get_files_in_directory(directory_path) for file in files: print(file)
方法二:使用 os.walk()(包含子目录)
import os def get_all_files(directory): """获取指定目录及其所有子目录下的文件""" all_files = [] for root, dirs, files in os.walk(directory): for file in files: file_path = os.path.join(root, file) all_files.append(file_path) return all_files # 使用示例 directory_path = "/path/to/your/directory" all_files = get_all_files(directory_path) for file in all_files: print(file)
方法三:使用 pathlib(Python 3.4+ 推荐)
from pathlib import Path def get_files_pathlib(directory): """使用pathlib获取目录下的所有文件""" path = Path(directory) # 仅当前目录 files = [f for f in path.iterdir() if f.is_file()] # 包含子目录 all_files = list(path.rglob('*')) all_files = [f for f in all_files if f.is_file()] return all_files # 使用示例 directory_path = "/path/to/your/directory" files = get_files_pathlib(directory_path) for file in files: print(file)
方法四:使用 glob(支持模式匹配)
import glob def get_files_glob(directory, pattern="*"): """使用glob获取匹配特定模式的文件""" # 仅当前目录 files = glob.glob(f"{directory}/{pattern}") files = [f for f in files if os.path.isfile(f)] # 包含子目录 all_files = glob.glob(f"{directory}/**/{pattern}", recursive=True) all_files = [f for f in all_files if os.path.isfile(f)] return all_files # 使用示例 directory_path = "/path/to/your/directory" # 获取所有.txt文件 txt_files = get_files_glob(directory_path, "*.txt") for file in txt_files: print(file)
完整示例:带错误处理
import os from pathlib import Path def get_files_safe(directory): """安全地获取目录中的所有文件(带错误处理)""" if not os.path.exists(directory): raise FileNotFoundError(f"目录不存在: {directory}") if not os.path.isdir(directory): raise NotADirectoryError(f"路径不是目录: {directory}") all_files = [] try: for root, dirs, files in os.walk(directory): for file in files: file_path = os.path.join(root, file) all_files.append(file_path) except PermissionError: print(f"警告: 没有权限访问 {directory} 中的某些目录") return all_files # 使用示例 try: directory_path = "/path/to/your/directory" files = get_files_safe(directory_path) print(f"找到 {len(files)} 个文件:") for file in files: print(file) except Exception as e: print(f"错误: {e}")
选择哪种方法取决于你的具体需求:
如果只需要当前目录的文件,使用
os.listdir()
或pathlib.Path.iterdir()
如果需要递归获取所有子目录的文件,使用
os.walk()
或pathlib.Path.rglob()
如果需要模式匹配,使用
glob
对于新项目,推荐使用
pathlib
,因为它提供了更面向对象和直观的API