Python 脚本生成目录树

提示词:

我决定写一个python小脚本,给它一个文件路径,能够输出文件下的目录树。

目录树格式大致如下:(此处省略)

用到递归逻辑:遍历当前目录,打印文件,如果是文件夹则深入进去。

.strip(): 自动帮你删掉输入路径时可能不小心带上的首尾空格

提示词:key = lambda是什么意思,怎么用的?

lambda是一种快速定义单行函数的方式。

lambda x:x.name等价于

def get_name(x):

return x.name

key参数

在python的内置函数中,key用来决定排序的依据,在这段代码里就是"文件夹优先级高于文件名"、"文件名字符串升序排列"。

python 复制代码
import pathlib

def draw_tree(path, indent=""):
    """
    递归生成目录树结构
    """
    path = pathlib.Path(path)

    # 过滤掉一些不想显示的目录(如 __pycache__, .git 等)
    ignored = {'.git', '__pycache__', '.venv', '.vscode'}

    # 获取当前路径下的所有文件和文件夹,并排序(文件夹在前,文件在后)
    try:
        # 获取并排序:文件夹在前,文件在后
        items = sorted(list(path.iterdir()), key=lambda x: (x.is_file(), x.name))
        items = [item for item in items if item.name not in ignored]
    except PermissionError:
        print(f"{indent} [! 权限不足,无法访问]")
        return

    for i, item in enumerate(items):
        # 判断是否为当前层级的最后一个元素,决定使用 └── 还是 ├──
        is_last = (i == len(items) - 1)
        connector = "└── " if is_last else "├── "

        # 打印当前项
        print(f"{indent}{connector}{item.name}{'/' if item.is_dir() else ''}")

        # 如果是目录,递归调用
        if item.is_dir():
            # 如果是最后一个元素,下级缩进不再需要垂直线
            new_indent = indent + ("    " if is_last else "│   ")
            draw_tree(item, new_indent)

if __name__ == "__main__":
    # --- 用户交互部分 ---
    user_input = input("请输入目标文件夹路径 (直接回车表示当前目录): ").strip()

    # 如果用户没输入,默认当前目录 '.'
    target_path = user_input if user_input else "."
    path_obj = pathlib.Path(target_path)

    # 路径检查
    if path_obj.exists() and path_obj.is_dir():
        print(f"\n{path_obj.absolute().name}/")
        draw_tree(path_obj)
    else:
        print(f"错误: 路径 '{target_path}' 不存在或不是一个文件夹。")
相关推荐
Eloudy2 分钟前
全文 - version.A - AMBA CHI Chip-to-Chip(C2C)
java·开发语言·数据库·gpu·chiplet
秋名RG9 分钟前
Java历代LTS版本新特性详解(代码增强版)
java·开发语言·python
李少兄10 分钟前
深度剖析 Hutool ObjectUtil
java·开发语言
魏码不凡11 分钟前
Go 编译报错:undefined: webp.Encode 问题排查与解决
开发语言·后端·golang
276695829211 分钟前
youdao/有道翻译APP 算法协议分析
开发语言·前端·python·sign·youdao·有道翻译app算法·有道app协议请求
励志不掉头发的内向程序员19 分钟前
【从零写一个CAD 04】中键拖动平移:抓住一个点,让它一直待在鼠标底下
开发语言·c++·qt·学习·系统架构·计算机外设
tachibana22 小时前
与其他语言相比,使用 Go 有什么好处?
开发语言·后端·golang·go
阿俊-全栈开发6 小时前
LikeShop 单商户SaaS商城分销模块二开:佣金计算与结算逻辑实现
java·开发语言·微服务·likeshop·likeshop开源商城·likeshop多商户
夏天拐跑了西瓜8 小时前
一文入门LangChain:从框架认知到构建你的第一个AI Agent
python·langchain·conda·agent
魔猴疯猿9 小时前
从0到1用Python开发第一个智能体
人工智能·python·深度学习·神经网络·机器学习