2013-08-20 17 views
0

我需要一個遞歸爬取目錄以獲取列表文件dirs的功能,這些文件稍後將在現場的小型文件管理器中使用。我知道如何去做,但我想節省時間並使用功能,如果有的話。獲取完整目錄結構的函數

你能告訴在哪裏可以找到一個函數或建議落實辦法,因爲現在我只有一個選擇是創建一個旁路結構os.walk,然後isfile檢查,isdir,如你所知,也有文件沒有擴展。

輸出可以是這樣的(字典)

{ 
    "base_path": "c:\\my\\folder\\22\22\\2\\", 
    "images": [ 
     "mini.jpg", 
     "who_are_you.png", 
     "i_m_Red_John.gif" 
    ], 
    "js": [ 
     "and_who_are_you.jQuery.js", 
     "im_Patrick_Jane.js" 
    ], 
    "index.html", 
    "ahaha.htm" 
} 

回答

5

你不必檢查。 os.walk總是返回一個形式的元組:

(current_directory, directory_list, files_list) 

所以,你總是知道元組的第二個元素是在current_directory發現目錄的列表,以及第三個元素是在找到的文件列表current_directory

你應該以這種方式使用os.walk

for current, directories, files in os.walk(path): 
    # do your stuff... 
+0

不,我知道,但是看起來,這段代碼'根目錄,文件的文件在os.walk(os.path.join( 'sth_path' ,str(3))):print root,dirs,files' return sth like this 'sth_path \ 3 ['images'] ['page.htm','styles.css']' 'sth_path \ 3 \ images [] ['rss.gif','Thumbs.db']' 首先,我想生成這樣的列表 '['\\ 3 \\ images','\\ 3 \\ page.htm',' \\ 3 \\ styles.css','\\ 3 \\ images','\\ 3 \\ images \\ rss.gif','\\ 3 \\ images \\ Thumbs.db']' 檢查每個人的文件是否有'isdir','isfile'和buid字典我的問題 –

+0

然後,你應該改寫你的問題一點點。並解釋你想要生成什麼樣的結構。目前的結構不是一個有效的結構,因爲它不支持兩級目錄。你如何在你的結構中表達你在'images'子文件夾中有另一個子文件夾'figure'的情況。你應該更精確:) –