杰瑞科技汇

Python如何获取文件夹下所有文件?

在 Python 中,获取文件夹下的所有文件(包括子文件夹中的文件)有多种方法,下面我将为你介绍几种最常用和最实用的方法,从简单到强大,并附上详细的代码示例和解释。

Python如何获取文件夹下所有文件?-图1
(图片来源网络,侵删)

使用 os.listdir() (基础方法)

这是最基础的方法,可以获取指定目录下的所有条目(包括文件和文件夹)。

特点:

  • 简单直接。
  • 不包括子文件夹中的文件。
  • 需要手动区分文件和文件夹。

代码示例:

import os
# 指定要遍历的文件夹路径
folder_path = 'your_folder_path'  # 请替换成你的文件夹路径
# 检查路径是否存在
if not os.path.exists(folder_path):
    print(f"路径 '{folder_path}' 不存在。")
else:
    # 获取文件夹下的所有条目
    entries = os.listdir(folder_path)
    print(f"文件夹 '{folder_path}' 下的内容:")
    for entry in entries:
        # 打印每个条目的名称
        print(entry)
        # 如果需要区分文件和文件夹
        full_path = os.path.join(folder_path, entry)
        if os.path.isfile(full_path):
            print(f"  -> 是文件: {entry}")
        elif os.path.isdir(full_path):
            print(f"  -> 是文件夹: {entry}")

使用 os.walk() (推荐,功能强大)

os.walk() 是 Python 中遍历目录树的“利器”,它会递归地遍历指定目录下的所有子目录和文件。

Python如何获取文件夹下所有文件?-图2
(图片来源网络,侵删)

特点:

  • 递归遍历:会自动进入所有子文件夹。
  • 返回一个生成器,非常节省内存,适合处理大型目录结构。
  • 返回的每个元素是一个三元组 (root, dirs, files)
    • root: 当前正在遍历的文件夹路径。
    • dirs: 该文件夹下包含的子文件夹列表。
    • files: 该文件夹下包含的文件列表。

代码示例 1:打印所有文件的完整路径

import os
# 指定要遍历的文件夹路径
folder_path = 'your_folder_path'  # 请替换成你的文件夹路径
print(f"正在查找文件夹 '{folder_path}' 及其子文件夹中的所有文件...")
# os.walk 会递归遍历所有子目录
for root, dirs, files in os.walk(folder_path):
    for file in files:
        # 拼接出文件的完整路径
        file_path = os.path.join(root, file)
        print(file_path)

代码示例 2:将所有文件路径存入列表

import os
folder_path = 'your_folder_path'
all_files = []
for root, dirs, files in os.walk(folder_path):
    for file in files:
        file_path = os.path.join(root, file)
        all_files.append(file_path)
print("找到的所有文件路径列表:")
for path in all_files:
    print(path)

使用 pathlib (现代、面向对象的方法)

Python 3.4+ 引入了 pathlib 模块,它提供了一种更现代、更直观的面向对象的方式来处理文件系统路径,这是目前最推荐的方法,代码更简洁、易读。

Python如何获取文件夹下所有文件?-图3
(图片来源网络,侵删)

特点:

  • 面向对象,代码更清晰。
  • 方法名(如 .iterdir(), .glob(), .rglob())非常直观。
  • 跨平台性好。

代码示例 1:使用 Path.rglob() 递归查找所有文件

Path.rglob('pattern') 会递归地在当前目录及其所有子目录中查找匹配 pattern 的文件。 是一个通配符,代表任意名称。

from pathlib import Path
# 指定要遍历的文件夹路径
folder_path = Path('your_folder_path')  # 请替换成你的文件夹路径
# 检查路径是否存在
if not folder_path.is_dir():
    print(f"路径 '{folder_path}' 不是一个文件夹或不存在。")
else:
    # rglob('*') 会递归查找所有文件
    # p 是一个 Path 对象,可以使用 .as_posix() 或 str() 转换为字符串
    all_files = [p for p in folder_path.rglob('*') if p.is_file()]
    print("找到的所有文件:")
    for file_path in all_files:
        # 打印文件的完整路径字符串
        print(file_path)

代码示例 2:使用 Path.glob() 查找特定类型的文件

如果你想查找特定扩展名的文件(例如所有 .txt 文件),pathlib 非常方便。

from pathlib import Path
folder_path = Path('your_folder_path')
# 查找所有 .txt 文件
# '**/' 表示在任意层级的子目录中查找
txt_files = folder_path.rglob('**/*.txt')
print("找到的所有 .txt 文件:")
for file_path in txt_files:
    print(file_path)

总结与对比

方法 核心函数 特点 适用场景
os.listdir() os.listdir() 基础,只获取一级目录内容,需手动处理子目录。 只需要查看当前文件夹下的文件,不关心子目录时。
os.walk() os.walk() 递归遍历,返回生成器,内存效率高,功能强大。 最常用,需要递归获取文件夹下所有文件时,是经典且可靠的选择。
pathlib Path.rglob() 现代、推荐,面向对象,代码简洁易读。 强烈推荐,特别是对于新项目,代码更优雅,功能也更丰富(如轻松处理文件扩展名、路径拼接等)。

如何选择?

  • 新手或简单任务:如果只是简单地获取一个文件夹下的文件,不涉及子目录,os.listdir() 足够。
  • 需要递归查找所有文件:如果你需要获取一个文件夹及其所有子文件夹中的文件,os.walk() 是最经典、最通用的选择,兼容性好。
  • 新项目或追求代码优雅:强烈推荐使用 pathlib,它的 API 设计更符合 Python 的哲学,代码可读性更高,是处理文件路径的未来趋势,对于大多数现代 Python 这是最佳选择。
分享:
扫描分享到社交APP
上一篇
下一篇