python实现的txt目录树
首先,我先表述一下我的需求:
我记笔记比较乱,但我比较容易"半途而废".文件夹很多,但大都只有一两个文件....
所以我需要一种方式,能在不逐个打开文件夹的前提下,"看到每个文件的名字和位置"

最后发现,我需要的应该是目录树.....不过我不需要制表符,要统统使用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目录树的更多相关文章
- python 小程序 复制目录树
1. 将一个目录树完全复制到另外一个目录下面 import os, sys """ 复制目录树 """ maxloadsize = 1024 ...
- paip.tree 生成目录树到txt后的折叠查看
paip.tree 生成目录树到txt后的折叠查看 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.ne ...
- python生成指定文件夹目录树
# -*- coding: utf-8 -*- import sys from pathlib import Path class DirectionTree(object): "" ...
- python课件-淘宝-目录.txt
卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python课件-淘宝-目录.txt│ ├─01python核心编程阶段-linux基础(│ linux_h ...
- python GUI编程tkinter示例之目录树遍历工具
摘录 python核心编程 本节我们将展示一个中级的tkinter应用实例,这个应用是一个目录树遍历工具:它会从当前目录开始,提供一个文件列表,双击列表中任意的其他目录,就会使得工具切换到新目录中,用 ...
- 《Python标准库》 目录
目录 译者序序前言第1章 文本1.1 string—文本常量和模板1.1.1 函数1.1.2 模板1.1.3 高级模板1.2 textwrap—格式化文本段落1.2.1 示例数据1.2.2 填充段落1 ...
- Python之文件与目录
file 通常建议使用open()打开文件,file用于类型判断 如果要把数据写到磁盘上,除调用flush()外,还得用sync(),以确保数据从系统缓冲区同步到磁盘.close()总是会调用这两个方 ...
- 基于window自带功能生成目录树
在写文档时,生成目录树是非常有必要的,可以清晰明了地用图阐释一些事情. 1 生成目录树 1.1 方案1:操作繁(只显示文件夹) 1 - win + R 2 - 输入 “CMD” ,打开命令提示窗口“ ...
- 超全!python的文件和目录操作总结
文件的基本读写 path = r'C:\Users\Brady\Documents\tmp' with open(path + r'\demo.txt', 'r', encoding='utf-8') ...
随机推荐
- EFI、UEFI、MBR、GPT的区别
UEFI.GPT.MBR是什么?这些专业术语不难理解,UEFI属于主板类名词,其作用类似于BIOS.GPT.MBR则属于硬盘类名词,它们的作用类似一艘航母的骨架,有了这个骨架,我们才可以进行细致到诸如 ...
- 解决MyEclipse中的Building workspace问题
解决MyEclipse中的Building workspace问题 1.方法一 点击"Project",取消勾选"Build Automatically" 2. ...
- Linux显示PCI设备
Linux显示PCI设备 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ lspci -tv -[0000:00]-+-00.0 Advanced Micro ...
- hibernate学习(三) hibernate中的对象状态
hibernate对象的状态分为三种: 游离状态,持久化状态,瞬时状态 下面一行代码区分: Configuration cfg=new Configuration().configure(); ...
- 关于protected关键字
protected,算是默认的访问作用域的超集,他们在相同包下时,都可以访问所声明的成员:但对于不同包的访问,默认访问域就不行,protected也必须是通过继承关系来访问. TestBase bas ...
- 【BZOJ2005】【NOI2010】能量采集(莫比乌斯反演,容斥原理)
[BZOJ2005][NOI2010]能量采集(莫比乌斯反演,容斥原理) 题面 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量 ...
- 【NOIP2015】斗地主(搜索,贪心)
题面戳我 题解 我原来也觉得是一道不可做的难题.. 其实,,,很简单的啦... 对于当前状态 我们出牌的方式大致分为两类 一类是不用考虑点数的,包括单张,对子,三带一等 另一类就是需要考虑点数的,包括 ...
- POJ - 2828
题意 输入队伍长度n 接下来n行,a,b 表示b插在队伍的a处 求队伍最后的情况 题解 刚开始并不知道要用线段树,经大佬点悟,发现最后插入的位置就是对应的a.所以可以从后往前依次插入,每次的位置pos ...
- Luogu2045 方格取数加强版
题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来,该格子的数就变 ...
- clientTop,scrollTop,兼容
在开发中常见的额兼容性问题: scrollTop问题: function scroll() { // 开始封装自己的scrollTop if(window.pageYOffset != null) { ...