首先,我先表述一下我的需求: 我記筆記比較亂,但我比較容易"半途而廢".文件夾很多,但大都只有一兩個文件.... 所以我需要一種方式,能在不逐個打開文件夾的前提下,"看到每個文件的名字和位置" 最後發現,我需要的應該是目錄樹.....不過我不需要製表符,要統統使用tab 那就擼起袖子開乾 第一部分, ...
首先,我先表述一下我的需求:
我記筆記比較亂,但我比較容易"半途而廢".文件夾很多,但大都只有一兩個文件....
所以我需要一種方式,能在不逐個打開文件夾的前提下,"看到每個文件的名字和位置"
最後發現,我需要的應該是目錄樹.....不過我不需要製表符,要統統使用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打開....
搭配 摺疊/收起 食用更佳