以下是几种使用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