2011年3月30日

os.walk

要處理目錄結構用的
import os

for rootpath, dirlist, filelist in os.walk("./"):
print rootpath, dirlist, filelist

就可以看出效果,以這樣的目錄結構:
.
|-- 2
| |-- 3
| | |-- 4a
| | `-- 4b
| `-- 3a
|-- 2a
`-- 2b
`-- X


剛剛的code會print:
./ ['2b', '2'] ['2a']
./2b [] ['X']
./2 ['3'] ['3a']
./2/3 [] ['4b', '4a']

印出 4 行,也就是說,上面的 code, ,loop 4 次。


walk 的方式分為 TopDown 和 ButtomUp (TopDown=False).

TopDown 的時候,可以刪掉 dirlist 的內容,這樣接下來的 walk 就不會進去..
import os

for rootdir,dirlist,filelist in os.walk('./'):
print rootdir, dirlist, filelist
if '2b' in dirlist:
dirlist.remove('2b')

結果,2b 的內容就不會出現:
./ ['2b', '2'] ['2a']./2b [] ['X']
./2/3 [] ['4b', '4a']
./2 ['3'] ['3a']
./ ['2b', '2'] ['2a']

只有出現 3 次




ButtomUp 用在要刪除目錄的時候,因為目錄是空的就不能刪除,
所以要 ButtomUp..

上面的目錄結構用 os.walk('.',topdown=False) 結果是
./2b [] ['X']
./2/3 [] ['4b', '4a']
./2 ['3'] ['3a']
./ ['2b', '2'] ['2a']

沒有留言:

張貼留言