当前位置:首页 > Python > 正文

Python读取文件名教程 - 5种方法详解 | Python文件操作指南

Python读取文件名完全指南

掌握5种高效方法读取目录中的文件名

本教程详细讲解Python中读取文件名的各种方法,包含实际代码示例和性能比较,帮助您高效处理文件操作任务

为什么需要读取文件名?

在Python开发中,读取文件名是一项常见任务,适用于多种场景:

  • 批量处理文件(如图像、文档、数据文件)
  • 自动化文件管理任务(重命名、移动、删除)
  • 构建文件索引或目录结构
  • 数据分析前的文件收集
  • 监控文件夹变化
注意: 读取文件名与读取文件内容不同。本教程专注于获取文件名而非文件内容。

方法概览

os.listdir()

最基础的目录列表方法,返回指定路径下的所有文件和目录名

glob.glob()

支持通配符模式匹配,适合查找特定类型的文件

os.scandir()

Python 3.5+推荐的高效方法,可获取文件属性

pathlib.Path()

面向对象的文件路径操作,现代Python的首选

os.walk()

递归遍历目录树,获取所有子目录中的文件

方法详解与代码示例

1. 使用 os.listdir()

这是Python中最简单直接的获取文件名的方法,返回指定目录下的所有文件和子目录名称列表。

import os

# 指定目录路径
directory = './documents'

# 获取目录下所有文件和子目录名
file_list = os.listdir(directory)

# 过滤出文件(排除目录)
files_only = [f for f in file_list if os.path.isfile(os.path.join(directory, f))]

# 打印结果
print("Files in directory:")
for file in files_only:
    print(file)
提示: os.listdir() 返回的是相对路径的文件名。如果需要绝对路径,可以使用 os.path.join(directory, filename)

2. 使用 glob.glob()

当需要根据特定模式(如文件扩展名)过滤文件时,glob模块非常实用。

import glob

# 查找所有.txt文件
txt_files = glob.glob('./documents/*.txt')

# 递归查找所有子目录中的.jpg文件
jpg_files = glob.glob('./documents/**/*.jpg', recursive=True)

# 只获取文件名(不带路径)
file_names = [os.path.basename(path) for path in txt_files]

print("Text files found:")
print(file_names)

3. 使用 os.scandir() (Python 3.5+)

os.scandir() 相比 listdir() 更高效,特别在需要文件类型或属性信息时。

import os

directory = './documents'

# 使用scandir()遍历目录
with os.scandir(directory) as entries:
    file_names = [entry.name for entry in entries if entry.is_file()]

print("Files using scandir:")
print(file_names)
性能优势: 对于大型目录,os.scandir() 比 os.listdir() 更快,因为它返回的是包含文件信息的DirEntry对象。

4. 使用 pathlib.Path() (Python 3.4+)

pathlib提供了面向对象的文件路径操作,是现代Python文件操作的首选。

from pathlib import Path

# 创建Path对象
folder = Path('./documents')

# 获取所有文件名
all_files = [f.name for f in folder.iterdir() if f.is_file()]

# 获取特定扩展名的文件
pdf_files = [f.name for f in folder.glob('*.pdf')]

# 递归查找所有.py文件
python_files = [str(f) for f in folder.rglob('*.py')]

print("PDF Files:")
print(pdf_files)
面向对象优势: pathlib将文件路径表示为对象,使代码更简洁、易读且跨平台兼容。

5. 使用 os.walk() 遍历目录树

当需要递归处理目录及其所有子目录时,os.walk() 是最佳选择。

import os

# 遍历目录树
all_files = []
for root, dirs, files in os.walk('./project'):
    # 处理当前目录中的文件
    for file in files:
        # 获取文件相对路径
        file_path = os.path.join(root, file)
        all_files.append(file_path)

# 只显示前10个文件
print("First 10 files in directory tree:")
for file in all_files[:10]:
    print(file)

方法比较

方法 递归能力 文件属性 模式匹配 Python版本 性能
os.listdir() 所有版本 中等
glob.glob() ✅ (with **) 所有版本 良好
os.scandir() 3.5+ 优秀
pathlib.Path ✅ (rglob) 3.4+ 良好
os.walk() 所有版本 中等(大型目录)

应用场景建议

简单文件列表

对于不需要递归的小型目录,使用 os.listdir()os.scandir() 是最直接的选择。

模式匹配查找

当需要查找特定扩展名或模式的文件时,使用 glob.glob()pathlib.Path.glob()

递归目录遍历

对于需要处理嵌套目录的场景,使用 os.walk()pathlib.Path.rglob()

高性能需求

在需要处理大量文件且性能关键的场景,优先选择 os.scandir()

现代Python项目

在新项目中,推荐使用面向对象的 pathlib 模块,它提供了更Pythonic的API。

本教程提供了Python中读取文件名的全面指南。根据您的具体需求选择合适的方法,可以大大提高文件处理效率。

© 2023 Python文件操作教程 | 提供实用的Python编程指南

发表评论