📌 简介:

在日常 Python 编程过程中,我们经常需要遍历某个文件夹,获取其中的文件,比如读取日志文件、批量处理数据文件等。本文总结了使用 Python 获取指定目录下文件的多种方式,包括 os、glob 和 pathlib 三种常用方法,并说明如何筛选文件、获取文件名、绝对路径等信息。

👨‍💻 适用人群:

  • Python 初学者
  • 文件处理相关的开发者
  • 批量处理目录下文件的自动化脚本编写者

📂 示例目录结构:

假设我们有如下文件夹结构:

C:/example/path/
├── report.pdf  
├── data.csv  
├── notes.txt  
├── subfolder/  

我们的目标是:获取 C:/example/path/ 目录中的文件(不包括文件夹和子目录的文件)。

🚀 方法一:使用 os.listdir() 获取文件列表

标准库 os 提供了 listdir() 方法,用于列出指定目录下的所有内容(包括文件和文件夹)。我们可结合 os.path.isfile 来筛选出文件名。

示例代码:

import os

folder_path = "C:/example/path"
files = os.listdir(folder_path)

# 筛选出文件(排除目录)
file_list = [f for f in files if os.path.isfile(os.path.join(folder_path, f))]

print("文件列表:", file_list)

📌 注意:

  • os.listdir() 仅返回文件名,不含完整路径。
  • 若需拼接完整路径,可使用 os.path.join()。

🚀 方法二:使用 glob 模糊匹配文件名

glob 模块支持使用通配符匹配特定类型的文件,比如获取所有 .txt 文件或所有文件。

示例代码:

import glob
import os

folder_path = "C:/example/path"

# 获取所有文件(包括路径)
file_list = glob.glob(os.path.join(folder_path, '*'))

# 只获取特定类型文件,比如所有 .txt 文件
# file_list = glob.glob(os.path.join(folder_path, '*.txt'))

print("文件路径列表:", file_list)

📌 通配符说明:

  • *:匹配任意字符(不跨目录)
  • ?.txt:匹配类似 a.txt、b.txt
  • **:在 recursive=True 模式下可递归子目录

🚀 方法三:使用 pathlib(Python 3.4+ 推荐)

pathlib 是 Python 现代路径处理的推荐方式,可读性强,可跨平台兼容性好。

示例代码:获取指定目录下的所有文件(不包含子目录和文件夹)

from pathlib import Path

folder_path = Path("C:/example/path")
file_list = [f for f in folder_path.iterdir() if f.is_file()]

for file in file_list:
    print(file.name)        # 打印文件名(如 data.csv)
    # print(file)           # 打印路径(如 C:\example\path\data.csv)
    # print(file.stem)      # 文件名(不带扩展名):data
    # print(file.suffix)    # 后缀名:.csv
    # print(file.resolve()) # 绝对路径

📌 pathlib 常用属性:

属性 含义 示例结果
.name 文件名 data.csv
.stem 不含扩展名的文件名 data
.suffix 扩展名 .csv
.resolve() 获取绝对路径 C:…

🚀 进阶技巧:递归子文件夹下的所有文件

os.walk 或 pathlib.rglob 可以实现递归遍历所有子文件夹。

使用 pathlib.rglob:

from pathlib import Path

folder_path = Path("C:/example/path")
all_files = folder_path.rglob('*')  # 遍历所有文件和目录

only_files = [f for f in all_files if f.is_file()]

for file in only_files:
    print(file.relative_to(folder_path))  # 打印相对路径

使用 os.walk:

import os

folder_path = "C:/example/path"

for dirpath, dirnames, filenames in os.walk(folder_path):
    for filename in filenames:
        print(os.path.join(dirpath, filename))

🧾 总结:

方法 优势 推荐场景
os.listdir 简单快捷 平铺目录中的文件
glob 支持通配符 只匹配特定类型文件
pathlib 面向对象,表达清晰 推荐!现代 Python 文件处理工作流
os.walk / rglob 支持递归遍历 查找子目录中的所有文件

✅ 小贴士:

  • Windows 路径建议使用双斜杠(\)或原始字符串:r”C:\path”
  • pathlib 自动处理跨平台斜杠(Windows 和 Unix)
  • 所有方法都需要处理中文或特殊字符路径时,建议使用 pathlib,避免编码问题

📚 推荐阅读:

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。