python 抓取目录树_python实现的txt目录树

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

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

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

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

那就撸起袖子开干

#总体框架

os.walk()获取全部路径,文件名信息

将上面得到的数据转换为文本

写入txt

启动记事本打开写好的txt

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

#代码:

importosprint(list(os.walk(".")))#运行结果

[('.', ['示例'], ['ls.py', 'mian.py', '新增.py']), ('.\\示例', [], ['a.txt'])]'''文件结构

示例

a.txt

ls.py

mian.py

新增.py'''

PS:     "." 代指当前目录

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

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

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

#转化为文本

defto_txt(路径):

定义一个空list

得到此路径下的子文件夹,子文件名字

写入文件夹自身的名字

将每个子文件夹"文本化"并塞入list

将每个文件名加上"\n"并塞入listreturn list

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

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

importos

list_way= (list(os.walk(".")))

dict_way= dict( zip( [ i[0] for i inlist_way] , list_way ) )for i indict_way:print(i ,end = " ")print(dict_way[i])'''================运行结果====================

.\示例 ('.\\示例', [], ['a.txt'])

. ('.', ['示例'], ['ls.py', 'mian.py', 'txt.bj', '新增.py'])'''

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

importos

list_way= (list(os.walk(".")))

dict_way= dict( zip( [ i[0] for i inlist_way] , list_way ) )defto_txt(way):

l=[ ]

three=dict_way[ way ]#根据路径获取三元元组

tab_num = way.count("\\")#计算缩进数量, 缩进<=>文件层数<=>路径中\的个数

iftab_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,加换行

returnl#返回弄好的文本

l= to_txt(".")for i inl:print(i, end ="")'''========运行结果===========

示例

a.txt

ls.py

mian.py

txt.bj

新增.py'''

下面奉上无注释版

importos

list_way= (list(os.walk(".")))

dict_way= dict( zip( [ i[0] for i inlist_way] , list_way ) )defto_txt(way):

l=[ ]

three=dict_way[ way ]

tab_num= way.count("\\")iftab_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")returnl

l= to_txt(".")for i inl: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 inlist_txt:

fil.write(i)

os.system('notepad 目录树.txt')

完了...

全部的代码

importos

list_way= (list(os.walk(".")))

dict_way= dict( zip( [ i[0] for i inlist_way] , list_way ) )defto_txt(way):

l=[ ]

three=dict_way[ way ]

tab_num= way.count("\\")iftab_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")returnl

list_txt= to_txt(".")

with open("目录树.txt","w") as fil:for i inlist_txt:

fil.write(i)

os.system('notepad 目录树.txt')

撒花✿✿ヽ(°▽°)ノ✿

-end-

另外,我的目录树后缀是.bj

我已经将它设成了默认EditPlus打开....

搭配 折叠/收起 食用更佳

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值