2016-01-01 21 views
0

當使用python 3.5 os.walk()並查看dirname輸出時,我得到很多空列表(返回[ ])。我不知道爲什麼。os.walk的dirname中的空列表是什麼?

import os 
tdir = '/home/pontiac/testdir' 

gen0 = os.walk(tdir) 
print(next(gen0)[1]) 
print(next(gen0)[1]) 

gen1 = os.walk(tdir) 

for ea in gen1: 
    print(ea[1]) 

輸出:

['t2', 't1'] 

[] 

['t2', 't1'] 

[] 

[] 
+0

什麼是*的東西*在'/家庭/龐蒂亞克/ testdir'? –

+0

testdir - 目錄t1和t2並且沒有文件。 t1和t2 - 沒有子目錄,也沒有文件。 – user3163030

+0

明白了。我只是看着它,想通了,現在可以看到,看完你的評論後,這將是有用的信息..謝謝。 – user3163030

回答

1

Python Documentation引用:通過遍歷樹無論是自上而下 或自下而上

os.walk(top, topdown=True, onerror=None, followlinks=False)
生成的目錄樹中的文件名。對於根目錄頂部爲 (包括頂部本身)的樹中的每個目錄,它將生成一個三元組(dirpath,dirnames, 文件名)

dirpath是一個字符串,即目錄的路徑。 dirnames是 dirpath中子目錄的名稱(不包括'。'和'..')的列表。 文件名是 dirpath中的非目錄文件的名稱列表。請注意,列表中的名稱不包含路徑組件。 要獲取完整路徑(從頂部開始)到 dirpath中的文件或目錄,請執行os.path.join(dirpath,name)。

由於testdir只有兩個空目錄t1t2,所以你會得到:

>>> import os 
>>> t = '/home/pontiac/testdir' 
>>> for root, dirs, files in os.walk(t): 
    print root, dirs, files 


/home/testdir ['t1', 't2'] [] 
# ^rootdir  ^dirs list ^files in rootdir 
/home/testdir/t1 [] [] 
/home/testdir/t2 [] [] 
0

呼叫os.walk返回一個元組(dirpath, dirnames, filenames)。您打印此元組的[1]元素,dirnames,它是給定目錄中的子目錄的列表。您的目錄t1t2顯然不包含任何子目錄,因此爲空列表。

+0

這變成了很多!當我走過一個具有相當深度的目錄時,會列出空列表。我連續得到30+,我很困惑這是什麼意思。如果我試圖使用這部分操作系統。如果一個目錄沒有子目錄,我就不需要不存在的名字了? – user3163030

0

根據osdocumentation什麼os.walk返回是一個3元組(dirpath, dirnames, filenames)

假設你有一個目錄testdir

testdir 
     |- dir1 
     | |- file3.txt 
     |- dir2 
     |- file1.txt 
     |- file2.txt 

然後遍歷通過os.walk('path/to/testdir')返回將產生如下的元組發電機:

('path/to/testdir', ['dir2', 'dir1'], ['file3.txt', 'file1.txt', 'file2.txt']) 
('path/to/testdir/dir2', [], []) 
('path/to/testdir/dir1', [], ['file3.txt']) 

既然你從3-提取第一要素元組並獲取空列表,這意味着這些目錄不包含子目錄。