使用 pathlib (Python 3.4+)
pathlib 是Python 3.4及以上版本引入的现代路径操作库,它使用面向对象的方式处理文件系统路径,代码更简洁、更易读,这是目前最推荐的方法。

示例代码
import pathlib
# 1. 创建一个代表当前目录的 Path 对象
current_dir = pathlib.Path('.')
# 2. 使用 rglob() 递归查找所有文件和目录
# rglob('*') 会从 current_dir 开始,递归地查找所有项目
# sorted() 用于对结果进行排序,使输出更整洁
tree_items = sorted(current_dir.rglob('*'))
# 3. 打印目录树
for item in tree_items:
# 计算缩进层级,通过计算路径中 '/' 的数量
indent = ' ' * item.parent.name.count('/')
# 如果是目录,在末尾加上 '/'
print(f"{indent}{item.name}{'/' if item.is_dir() else ''}")
如何运行
- 将上面的代码保存为一个文件,
show_tree.py。 - 在你想要查看目录树的任意文件夹中打开终端或命令行。
- 运行该脚本:
python show_tree.py
输出示例
假设你的目录结构如下:
my_project/
├── src/
│ ├── main.py
│ └── utils/
│ └── helper.py
├── tests/
│ └── test_main.py
├── data.txt
└── show_tree.py
运行脚本后,输出会是:
data.txt
show_tree.py
src/
main.py
utils/
helper.py
tests/
test_main.py
备选方法1:使用 os 和 os.walk()
这是在Python 3.4之前非常经典和常用的方法。os.walk() 是一个生成器,它会遍历指定目录下的所有子目录,非常适合构建目录树。
示例代码
import os
def print_directory_tree(start_path='.'):
"""
从指定路径开始打印目录树。
"""
# os.walk 返回一个生成器,每次迭代返回一个三元组 (root, dirs, files)
for root, dirs, files in os.walk(start_path):
# 获取当前层级的缩进,通过计算路径分隔符的数量
level = root.replace(start_path, '').count(os.sep)
indent = ' ' * level
# 打印当前目录名
print(f"{indent}{os.path.basename(root)}/")
# 打印当前目录下的文件
subindent = ' ' * (level + 1)
for file in files:
print(f"{subindent}{file}")
# 调用函数,从当前目录开始打印
print_directory_tree('.')
这个方法的功能和 pathlib 版本类似,但代码略显冗长,对于一些旧的Python项目或需要兼容旧版本的环境,它仍然是一个可靠的选择。

备选方法2:使用第三方库 tree
如果你只是想在命令行中快速、美观地查看目录树,而不想写任何Python代码,安装一个专门的工具是最佳选择。
tree 是一个在Linux、macOS和Windows上都非常流行的命令行工具,专门用于以树状结构显示目录内容。
安装
在 Linux (使用 apt):
sudo apt-get install tree
在 macOS (使用 Homebrew):

brew install tree
在 Windows (使用 Chocolatey):
choco install tree
使用方法
安装完成后,在你想要查看的目录中打开终端,然后直接运行:
tree
输出示例
还是之前的目录结构,tree 命令的输出会更美观,并带有连接线:
.
├── data.txt
├── show_tree.py
├── src
│ ├── main.py
│ └── utils
│ └── helper.py
└── tests
└── test_main.py
你还可以使用一些有用的选项:
-a: 显示所有文件,包括隐藏文件。-L level: 限制显示的目录深度。-I pattern: 忽略匹配特定模式的文件或目录。
只显示到第二层并忽略 .pyc 文件:
tree -L 2 -I "*.pyc"
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
pathlib |
代码最简洁、最Pythonic、面向对象、功能强大 | 需要Python 3.4+ | 强烈推荐,在Python脚本中处理路径和文件系统的首选。 |
os.walk() |
兼容性好(Python 2 & 3)、功能强大 | 代码相对冗长,不够直观 | 需要兼容旧版Python,或者在进行复杂的文件系统遍历时。 |
tree 命令 |
速度最快、输出格式美观、无需编写代码 | 是外部工具,非Python内置功能 | 在命令行中快速查看目录结构,进行文件管理或代码审查。 |
- 如果你是在编写Python脚本,请优先选择
pathlib。 - 如果你只是想在终端里快速看一下,直接安装并使用
tree命令。
