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

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

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

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

那就撸起袖子开干

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

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

#代码:
import os
print(list(os.walk("."))) #运行结果
[('.', ['示例'], ['ls.py', 'mian.py', '新增.py']), ('.\\示例', [], ['a.txt'])]
'''文件结构
示例
a.txt
ls.py
mian.py
新增.py
'''

PS:     "." 代指当前目录

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

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

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

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

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

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

import os
list_way = (list(os.walk(".")))
dict_way = dict( zip( [ i[0] for i in list_way] , list_way ) )
for i in dict_way:
print(i ,end = " ")
print(dict_way[i]) '''
================运行结果====================
.\示例 ('.\\示例', [], ['a.txt'])
. ('.', ['示例'], ['ls.py', 'mian.py', 'txt.bj', '新增.py'])
'''

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

import os
list_way = (list(os.walk(".")))
dict_way = dict( zip( [ i[0] for i in list_way] , list_way ) ) def to_txt(way):
l = [ ]
three = dict_way[ way ]
#根据路径获取三元元组
tab_num = way.count("\\")
#计算缩进数量, 缩进<=>文件层数<=>路径中\的个数
if tab_num:
#如果路径中不含\ <=> 路径为"." <=> TAB_num == 0
#此时不用打文件夹名字 <=> 根目录
l.append("\t" * (tab_num - 1)+way.split("\\")[ -1 ] + "\n" )
#打出文件夹名字
#文件夹名字是路径里面"最后一个\"后面的部分
#文件名字,与上一级文件同级,故少个Tab
for i in three[1]:
#遍历子文件夹们
l = l + to_txt( way+"\\"+i )
#拼接路径,调用自身,实现子文件夹文本化
#鉴于返回值是列表 所以用"+"而非append
for i in three[2]:
#遍历子文件们
l.append( "\t" * tab_num + i +"\n")
#加Tab,加换行
return l
#返回弄好的文本 l = to_txt(".")
for i in l:
print(i, end ="")
'''
========运行结果===========
示例
a.txt
ls.py
mian.py
txt.bj
新增.py
'''

下面奉上无注释版

import os
list_way = (list(os.walk(".")))
dict_way = dict( zip( [ i[0] for i in list_way] , list_way ) ) def to_txt(way):
l = [ ]
three = dict_way[ way ]
tab_num = way.count("\\")
if tab_num:
l.append("\t" * (tab_num - 1)+way.split("\\")[ -1 ] + "\n" )
for i in three[1]:
l = l + to_txt( way+"\\"+i )
for i in three[2]:
l.append( "\t" * tab_num + i +"\n")
return l
l = to_txt(".")
for i in l:
print(i, end ="")
'''
===================
示例
a.txt
ls.py
mian.py
txt.bj
新增.py
'''

无注释的

第三部分和第四部分

写入txt,打开记事本

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

完了...

全部的代码

import os
list_way = (list(os.walk(".")))
dict_way = dict( zip( [ i[0] for i in list_way] , list_way ) ) def to_txt(way):
l = [ ]
three = dict_way[ way ]
tab_num = way.count("\\")
if tab_num:
l.append("\t" * (tab_num - 1)+way.split("\\")[ -1 ] + "\n" )
for i in three[1]:
l = l + to_txt( way+"\\"+i )
for i in three[2]:
l.append( "\t" * tab_num + i +"\n")
return l
list_txt = to_txt(".")
with open("目录树.txt","w") as fil:
for i in list_txt:
fil.write(i)
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. RFM模型+SOM聚类︱离群值筛选问题

        笔者寄语:一般情况下离群值不应该直接删除,应该进行筛选,然后进行专门的离群值分析.笔者在这进行一下思考,在聚类基础之上的一种离群点检验. 基于聚类的离群点检测的步骤如下:数据标准化--聚类-- ...

  2. R语言︱文本(字符串)处理与正则表达式

    处理文本是每一种计算机语言都应该具备的功能,但不是每一种语言都侧重于处理文本.R语言是统计的语言,处理文本不是它的强项,perl语言这方面的功能比R不知要强多少倍.幸运的是R语言的可扩展能力很强,DN ...

  3. R语言︱ROC曲线——分类器的性能表现评价

    笔者寄语:分类器算法最后都会有一个预测精度,而预测精度都会写一个混淆矩阵,所有的训练数据都会落入这个矩阵中,而对角线上的数字代表了预测正确的数目,即True Positive+True Nagetiv ...

  4. freemarker报错之十四

    1.错误描述 <html> <head> <meta http-equiv="content-type" content="text/htm ...

  5. Struts+Spring+Hibernate、MVC、HTML、JSP

    javaWeb应用 JavaWeb使用的技术,比如SSH(Struts.Spring.Hibernate).MVC.HTML.JSP等等技术,利用这些技术开发的Web应用在政府项目中非常受欢迎. 先说 ...

  6. IO网络模型

    多路处理模型MPM MPM是Apache2引入的一个概念,就是将结构模块化.把核心任务处理作为一个可插拔的模块,使其能针对不同的环境进行优化 在这个情况下,就诞生出了处理模式的概念 Prefork 实 ...

  7. es6的新特性--模板字符串

    这几天简单看了一下深入浅出es6这本书,感觉特实用,学习了一个新特性---模板字符串在项目开发中,拼接字符串是不可缺少的,动态创建dom元素以及js操作数据都要拼接字符串,在es6出来之前,我们都通常 ...

  8. Dijkstra算法与Bellman - Ford算法示例(源自网上大牛的博客)【图论】

    题意:题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离 poj2387 Description Bessie is out in the field and ...

  9. 基于Global.asax实现显示当前在线人数--ASP.NET基础

    相对来说比较简单,直接贴代码了哈: Global.asax: <%@ Application Language="C#" %><script runat=&quo ...

  10. VmWareTool安装