欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python实现的txt目录树

程序员文章站 2022-12-08 12:15:31
首先,我先表述一下我的需求: 我记笔记比较乱,但我比较容易"半途而废".文件夹很多,但大都只有一两个文件.... 所以我需要一种方式,能在不逐个打开文件夹的前提下,"看到每个文件的名字和位置" 最后发现,我需要的应该是目录树.....不过我不需要制表符,要统统使用tab 那就撸起袖子开干 第一部分, ......

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

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

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

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
'''    

下面奉上无注释版

python实现的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
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目录树

搭配 折叠/收起 食用更佳