Python 中如何列出一个目录下的所有文件?

Python 列出目录文件:os.listdir() 列全部条目、os.scandir() 更高效、pathlib.Path.glob() 按模式匹配、os.walk() 递归遍历。本文对比各种方式。

最佳实践
Python 中如何列出一个目录下的所有文件?封面

只列一层:os.listdir(path)Path(path).iterdir();按模式匹配:Path(path).glob('*.py');递归所有子目录:os.walk(path)Path(path).rglob('*')

os.listdir:列出一层

import os

files = os.listdir('/path/to/dir')
for f in files:
    print(f)   # 包含文件和子目录名,不含路径前缀

只要文件不要目录:

files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]

pathlib 方式(推荐)

from pathlib import Path

p = Path('/path/to/dir')

for f in p.iterdir():       # 全部条目
    if f.is_file():
        print(f.name)

# 按模式匹配
for f in p.glob('*.log'):   # 只要 .log 文件
    print(f)

for f in p.rglob('*.log'):  # 递归所有子目录
    print(f)

os.walk:递归遍历

import os

for dirpath, dirnames, filenames in os.walk('/path/to/dir'):
    for name in filenames:
        print(os.path.join(dirpath, name))

常见问题(FAQ)

Q:listdir 的结果顺序固定吗?
A:不固定(取决于文件系统)。需要排序用 sorted(os.listdir(path))

Q:glob 支持 ** 递归吗?
A:Path.glob('**/*.py') 中的 ** 表示任意层级子目录,等价于 rglob。

Q:要文件大小、修改时间怎么办?
A:os.scandir()Path.stat()f.stat().st_size(字节)、f.stat().st_mtime(修改时间戳)。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台