首先,我先表述一下我的需求:

我记笔记比较乱,但我比较容易"半途而废".文件夹很多,但大都只有一两个文件....

所以我需要一种方式,能在不逐个打开文件夹的前提下,"看到每个文件的名字和位置"

最后发现,我需要的应该是目录树.....不过我不需要制表符,要统统使用tab

那就撸起袖子开干

  1. #总体框架
  2. os.walk()获取全部路径,文件名信息
  3. 将上面得到的数据转换为文本
  4. 写入txt
  5. 启动记事本打开写好的txt

第一部分,一步搞定φ(>ω<*)

  1. #代码:
  2. import os
  3. print(list(os.walk(".")))
  4.  
  5. #运行结果
  6. [('.', ['示例'], ['ls.py', 'mian.py', '新增.py']), ('.\\示例', [], ['a.txt'])]
  7. '''文件结构
  8. 示例
  9. a.txt
  10. ls.py
  11. mian.py
  12. 新增.py
  13. '''

PS:     "." 代指当前目录

第二部分,最重要的部分,将第一部分得到的数据"文本化"

每个三元数组都是(路径,文件夹,文件)的格式,

那就写个函数将它换成文本

  1. #转化为文本
  2. def to_txt(路径):
  3. 定义一个空list
  4. 得到此路径下的子文件夹,子文件名字
  5. 写入文件夹自身的名字
  6. 将每个子文件夹"文本化"
  7. 并塞入list
  8. 将每个文件名加上"\n"
  9. 并塞入list
  10. return list

为了方便根据路径名得到 文件的信息

将第一步的得到的三元元组的列表 转换的成 以路径为键, 的字典

  1. import os
  2. list_way = (list(os.walk(".")))
  3. dict_way = dict( zip( [ i[0] for i in list_way] , list_way ) )
  4. for i in dict_way:
  5. print(i ,end = " ")
  6. print(dict_way[i])
  7.  
  8. '''
  9. ================运行结果====================
  10. .\示例 ('.\\示例', [], ['a.txt'])
  11. . ('.', ['示例'], ['ls.py', 'mian.py', 'txt.bj', '新增.py'])
  12. '''

PS:文件夹层数越多,前面的缩进就越多

  1. import os
  2. list_way = (list(os.walk(".")))
  3. dict_way = dict( zip( [ i[0] for i in list_way] , list_way ) )
  4.  
  5. def to_txt(way):
  6. l = [ ]
  7. three = dict_way[ way ]
  8. #根据路径获取三元元组
  9. tab_num = way.count("\\")
  10. #计算缩进数量, 缩进<=>文件层数<=>路径中\的个数
  11. if tab_num:
  12. #如果路径中不含\ <=> 路径为"." <=> TAB_num == 0
  13. #此时不用打文件夹名字 <=> 根目录
  14. l.append("\t" * (tab_num - 1)+way.split("\\")[ -1 ] + "\n" )
  15. #打出文件夹名字
  16. #文件夹名字是路径里面"最后一个\"后面的部分
  17. #文件名字,与上一级文件同级,故少个Tab
  18. for i in three[1]:
  19. #遍历子文件夹们
  20. l = l + to_txt( way+"\\"+i )
  21. #拼接路径,调用自身,实现子文件夹文本化
  22. #鉴于返回值是列表 所以用"+"而非append
  23. for i in three[2]:
  24. #遍历子文件们
  25. l.append( "\t" * tab_num + i +"\n")
  26. #加Tab,加换行
  27. return l
  28. #返回弄好的文本
  29.  
  30. l = to_txt(".")
  31. for i in l:
  32. print(i, end ="")
  33. '''
  34. ========运行结果===========
  35. 示例
  36. a.txt
  37. ls.py
  38. mian.py
  39. txt.bj
  40. 新增.py
  41. '''

下面奉上无注释版

  1. import os
  2. list_way = (list(os.walk(".")))
  3. dict_way = dict( zip( [ i[0] for i in list_way] , list_way ) )
  4.  
  5. def to_txt(way):
  6. l = [ ]
  7. three = dict_way[ way ]
  8. tab_num = way.count("\\")
  9. if tab_num:
  10. l.append("\t" * (tab_num - 1)+way.split("\\")[ -1 ] + "\n" )
  11. for i in three[1]:
  12. l = l + to_txt( way+"\\"+i )
  13. for i in three[2]:
  14. l.append( "\t" * tab_num + i +"\n")
  15. return l
  16. l = to_txt(".")
  17. for i in l:
  18. print(i, end ="")
  19. '''
  20. ===================
  21. 示例
  22. a.txt
  23. ls.py
  24. mian.py
  25. txt.bj
  26. 新增.py
  27. '''

无注释的

第三部分和第四部分

写入txt,打开记事本

  1. list_txt = to_txt(".")
  2. with open("目录树.txt","w") as fil:
  3. for i in list_txt:
  4.   fil.write(i)
  5. os.system('notepad 目录树.txt')

完了...

全部的代码

  1. import os
  2. list_way = (list(os.walk(".")))
  3. dict_way = dict( zip( [ i[0] for i in list_way] , list_way ) )
  4.  
  5. def to_txt(way):
  6. l = [ ]
  7. three = dict_way[ way ]
  8. tab_num = way.count("\\")
  9. if tab_num:
  10. l.append("\t" * (tab_num - 1)+way.split("\\")[ -1 ] + "\n" )
  11. for i in three[1]:
  12. l = l + to_txt( way+"\\"+i )
  13. for i in three[2]:
  14. l.append( "\t" * tab_num + i +"\n")
  15. return l
  16. list_txt = to_txt(".")
  17. with open("目录树.txt","w") as fil:
  18. for i in list_txt:
  19. fil.write(i)
  20. os.system('notepad 目录树.txt')

撒花✿✿ヽ(°▽°)ノ✿

-end-


另外,我的目录树后缀是.bj

我已经将它设成了默认EditPlus打开....

搭配 折叠/收起 食用更佳

python实现的txt目录树的更多相关文章

  1. python 小程序 复制目录树

    1. 将一个目录树完全复制到另外一个目录下面 import os, sys """ 复制目录树 """ maxloadsize = 1024 ...

  2. paip.tree 生成目录树到txt后的折叠查看

    paip.tree 生成目录树到txt后的折叠查看 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.ne ...

  3. python生成指定文件夹目录树

    # -*- coding: utf-8 -*- import sys from pathlib import Path class DirectionTree(object): "" ...

  4. python课件-淘宝-目录.txt

    卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python课件-淘宝-目录.txt│ ├─01python核心编程阶段-linux基础(│ linux_h ...

  5. python GUI编程tkinter示例之目录树遍历工具

    摘录 python核心编程 本节我们将展示一个中级的tkinter应用实例,这个应用是一个目录树遍历工具:它会从当前目录开始,提供一个文件列表,双击列表中任意的其他目录,就会使得工具切换到新目录中,用 ...

  6. 《Python标准库》 目录

    目录 译者序序前言第1章 文本1.1 string—文本常量和模板1.1.1 函数1.1.2 模板1.1.3 高级模板1.2 textwrap—格式化文本段落1.2.1 示例数据1.2.2 填充段落1 ...

  7. Python之文件与目录

    file 通常建议使用open()打开文件,file用于类型判断 如果要把数据写到磁盘上,除调用flush()外,还得用sync(),以确保数据从系统缓冲区同步到磁盘.close()总是会调用这两个方 ...

  8. 基于window自带功能生成目录树

    在写文档时,生成目录树是非常有必要的,可以清晰明了地用图阐释一些事情. 1 生成目录树 1.1 方案1:操作繁(只显示文件夹) 1 - win + R 2 - 输入 “CMD” ,打开命令提示窗口“ ...

  9. 超全!python的文件和目录操作总结

    文件的基本读写 path = r'C:\Users\Brady\Documents\tmp' with open(path + r'\demo.txt', 'r', encoding='utf-8') ...

随机推荐

  1. Form提交表单页面不跳转

    1.设计源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  2. AM335X的USB otg网卡(RNDIS /Ethernet Gadget)调试

    重新编译内核(2.6.29)       2.6.29内核        Device Drivers ---> USB support --->   USB Gadget Support ...

  3. Flex中的DataGrid报错(一)

    1.错误描述    此行的多个标记:    -holeNum    -1105: 赋值的目标必须是引用值. 2.错误原因    detailWindow.holeNum.toString() = &q ...

  4. Android的sdk、api及工程目录说明

    SDK下包的说明1:add-ons:Android开发需要的第三方文件和软件库2:docs:Android的文档.包括开发指南.API参考.资源等3:extras:扩展的附加包4:platforms: ...

  5. 芝麻HTTP: 1.9.3-Scrapyd-Client的安装

    在将Scrapy代码部署到远程Scrapyd的时候,第一步就是要将代码打包为EGG文件,其次需要将EGG文件上传到远程主机.这个过程如果用程序来实现,也是完全可以的,但是我们并不需要做这些工作,因为S ...

  6. 异常-----freemarker.core.ParseException: Encountered

    1.错误描述 freemarker.core.ParseException: Encountered " " at line 14, column 12 in myself.ftl ...

  7. JNDI在server.xml中的配置(全局和局部的)

    总结: 全局就是在数据源server.xml中配置,然后通过和项目名相同的xml来进行映射.对所有的项目都起作用.那个项目需要就在对应的tomcat下配置一个与项目名相同的xml映射文件. 局部的就是 ...

  8. RobotFramework下的http接口自动化Get Response header 关键字的使用

    Get Response header 关键字用来获取http请求返回的http响应头部数据. 常见的Response Header: Header 解释 示例 Accept-Ranges 表明服务器 ...

  9. Python--urllib3库详解1

    Python--urllib3库详解1 Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3.Urllib3提供了很多pyt ...

  10. 【BZOJ1003】物流运输(动态规划,最短路)

    [BZOJ1003]物流运输(动态规划,最短路) 题面 Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司 ...