zoukankan      html  css  js  c++  java
  • 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
        将每个文件名加上"
    "
        并塞入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("	" * (tab_num - 1)+way.split("\")[ -1 ] + "
    " )
            #打出文件夹名字
            #文件夹名字是路径里面"最后一个"后面的部分
            #文件名字,与上一级文件同级,故少个Tab
        for i in three[1]:
        #遍历子文件夹们
            l = l + to_txt( way+"\"+i )
            #拼接路径,调用自身,实现子文件夹文本化
            #鉴于返回值是列表 所以用"+"而非append
        for i in three[2]:
        #遍历子文件们
            l.append( "	" * tab_num + i +"
    ")
            #加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("	" * (tab_num - 1)+way.split("\")[ -1 ] + "
    " )
        for i in three[1]:
            l = l + to_txt( way+"\"+i )
        for i in three[2]:
            l.append( "	" * tab_num + i +"
    ")
        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("	" * (tab_num - 1)+way.split("\")[ -1 ] + "
    " )
        for i in three[1]:
            l = l + to_txt( way+"\"+i )
        for i in three[2]:
            l.append( "	" * tab_num + i +"
    ")
        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打开....

    搭配 折叠/收起 食用更佳

  • 相关阅读:
    java程序陷阱
    Django学习之manage.py使用
    myeclipse安装SVN插件方法
    myeclipse2014黑色主题风格设置
    eclipse中svn插件的安装
    与MySQL的零距离接触
    配置tomcat的用户名和密码
    java中的作用域
    [原]Wpf应用Path路径绘制圆弧
    WPF中Converter的使用
  • 原文地址:https://www.cnblogs.com/ansver/p/8660386.html
Copyright © 2011-2022 走看看