杰瑞科技汇

Python如何获取当前目录树结构?

使用 pathlib (Python 3.4+)

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

Python如何获取当前目录树结构?-图1
(图片来源网络,侵删)

示例代码

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 ''}")

如何运行

  1. 将上面的代码保存为一个文件,show_tree.py
  2. 在你想要查看目录树的任意文件夹中打开终端或命令行。
  3. 运行该脚本: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:使用 osos.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项目或需要兼容旧版本的环境,它仍然是一个可靠的选择。

Python如何获取当前目录树结构?-图2
(图片来源网络,侵删)

备选方法2:使用第三方库 tree

如果你只是想在命令行中快速、美观地查看目录树,而不想写任何Python代码,安装一个专门的工具是最佳选择。

tree 是一个在Linux、macOS和Windows上都非常流行的命令行工具,专门用于以树状结构显示目录内容。

安装

在 Linux (使用 apt):

sudo apt-get install tree

在 macOS (使用 Homebrew):

Python如何获取当前目录树结构?-图3
(图片来源网络,侵删)
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 命令
分享:
扫描分享到社交APP
上一篇
下一篇