当前位置: 首页 > news >正文

Python树形打印目录结构

前言

这两天整理数据文件的时候发现,一层层的点击文件夹查看很繁琐,于是想写一个工具来递归打印出文件目录的树形结构,网上找了一些资料几乎都是使用的os.walk, 调试了以后发现返回的貌似的是一个“生成器”,只需要for循环即可,可是这样得到的好像是BFS的结构,并不是我想要的树形结构,最后终于发现了os.listdir这个函数,可是使用它来写一个深度优先搜索,只要递归调用就能解决我的问题。

代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#a test for traverse directory

__author__ = 'AlbertS'

import os
import os.path

def dfs_showdir(path, depth):
    if depth == 0:
        print("root:[" + path + "]")

    for item in os.listdir(path):
        if '.git' not in item:
            print("|      " * depth + "+--" + item)

            newitem = path +'/'+ item
            if os.path.isdir(newitem):
                dfs_showdir(newitem, depth +1)

if __name__ == '__main__':
    dfs_showdir('.', 0)

运行效果

root:[.]
+--1111.segmentfault.com
|      +--01decode.py
|      +--01string.txt
|      +--1111.segmentfault.com.tar.gz
+--urllib_test.py
+--use_module.py
+--water_deal
|      +--water_pouring2.py
+--web
|      +--module_test.py
|      +--__init__.py
|      +--__pycache__
|      |      +--module_test.cpython-34.pyc
|      |      +--__init__.cpython-34.pyc
+--web_crawler
|      +--bg_teaser.svg
|      +--crawler_images
|      |      +--10393478-1.jpg
|      |      +--13802226-1.jpg
|      |      +--169b1b76356f636.jpg
|      |      +--1a774de56fb4bf2.jpg
|      |      +--small_event_dft.jpg
|      |      +--ypy_qr.jpg
|      +--crawler_image_test.py
|      +--crawler_test.py
|      +--crawler_website
|      |      +--crawler_article_set
|      |      |      +--aiohttp.html
|      |      |      +--asyncio.html
|      |      |      +--async_await.html
|      |      |      +--base64.html

总结

  1. 一开始写的时候发现只能递归一层文件夹,后来发现问题出现在os.path.isdir函数这里。
  2. 传给os.path.isdir函数函数的参数只能是一个绝对路径,或者相对于工作目录的相对路径。
  3. 有了上面发现的问题,才有了newitem变量拼接的过程。

相关文章:

  • 排序算法系列之(二)——冒泡排序名字最为形象的一个
  • Python查找文件中包含中文的行
  • sscanf类似于正则表达式的进阶用法
  • mysql函数扩展之UDF开发
  • Python实现一个简单的图片爬虫
  • 验证mysql联合索引最左原则
  • Mysql查询时case when语句的使用
  • Vim中简单格式化代码
  • Vim、Xshell、远程终端莫名卡死的原因
  • 关于游戏中仓库类的设计
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • 神秘莫测的时间复杂度
  • 排序算法系列之(三)——略显神秘的快速排序
  • .bat批处理(六):替换字符串中匹配的子串
  • 操作指向类成员的指针需要了解的两个操作符-*和.*
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • CentOS7 安装JDK
  • DataBase in Android
  • django开发-定时任务的使用
  • ECMAScript入门(七)--Module语法
  • JS题目及答案整理
  • October CMS - 快速入门 9 Images And Galleries
  • 大整数乘法-表格法
  • 电商搜索引擎的架构设计和性能优化
  • 免费小说阅读小程序
  • 七牛云假注销小指南
  • 深度学习中的信息论知识详解
  • 跳前端坑前,先看看这个!!
  • 为视图添加丝滑的水波纹
  • 学习笔记:对象,原型和继承(1)
  • python最赚钱的4个方向,你最心动的是哪个?
  • zabbix3.2监控linux磁盘IO
  • 阿里云服务器购买完整流程
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​什么是bug?bug的源头在哪里?
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • ###C语言程序设计-----C语言学习(6)#
  • #Linux(权限管理)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #pragam once 和 #ifndef 预编译头
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Java数据结构)ArrayList
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二)c52学习之旅-简单了解单片机
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (十六)串口UART
  • (四)c52学习之旅-流水LED灯
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)认识微服务
  • (转)我也是一只IT小小鸟
  • ..回顾17,展望18
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本