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') ...
随机推荐
- javascript学习笔记 --event事件
事件源(按钮.窗口)->事件对象->事件处理程序 事件源可以是网页元素浏览器窗口事件处理程序一般是一个函数. 一个事件可以被多个函数处理 事件的总类 鼠 ...
- C#中的匿名函数使用,类名<T>
C#中有个叫做"泛型"的集合,就是说只是个外壳,到底是int,string,bool还是什么类型,都可以按照自己的要求进行定义集合,所以我们用个"T"表示. 请 ...
- ORA-00900: invalid SQL statement
1.错误描述 SQL> startup; startup ORA-00900: invalid SQL statement 2.错误原因 3.解决办法
- LeetCode 456. 132 Pattern
问题描述 给一组数,判断这组数中是否含有132 pattern. 132 pattern: i < j < k, 且 ai < ak < aj 第一种解法 使用栈来保存候选的子 ...
- TCP/IP资料整理
一.概念 1. TCP/IP常见帧格式 2. 详解网络嗅探工具的原理 二.API 1. Linux kernel tcp 连接建立详解——由listen系统调用的backlog参数引发的长篇大论
- C#方法有关内容的总结--C#基础
1.静态方法与实例方法 using System;using System.Collections.Generic;using System.Linq;using System.Text;using ...
- RobotFramework下的http接口自动化Set Request Header 关键字的使用
Set Request Header 关键字用来设置http请求时的请求头部信息. 该关键字接收两个参数,[ header_name | header_value ] 示例1:设置http请求时的Re ...
- 关于js的语句类型运算符等
JavaScript的基本语句有以下几种: 1.for(判断条件){执行内容}: 2.if(条件){...}else{ ....}: 3.while(条件){....}:先判断条件再执行: do{.. ...
- 【SDOI2009】HH的项链 (莫队)
题面 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的 ...
- [Luogu3768]简单的数学题
题面戳我 题意:求 \[\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\] \(n\le10^{10}\) sol \[ans=\sum_{d=1}^{n}d\sum_ ...