2013-02-13 122 views
0

我想知道是否可以通過索引號檢索os.walk類中特定子文件夾中的特定文件。如何在Python中使用os.walk獲取特定文件或目錄列表?

我還想知道如何只列出os.walk中特定級別的子級,例如只是根目錄的子級。我可以列出所有的subdirs,我可以看到第一級subdirs的列表首先被分組在一起,但我找不到一個方法來篩選出那些沒有使用循環的方法...

類似這樣的工作(改編自另一個問題)部分,但我不知道如何將文件夾從只有一個級別過濾:

dirs[:] = [d for d in dirs if re.match('anyname_\d{3}', d, flags=0)] 

元組使用type命令和一些錯誤時顯示爲「列表」的os.walk嘗試時使用索引號引用字典對象的不當使用。我很困惑。

謝謝!

+2

也許你正在尋找簡單的'os.listdir('/ path/to/dir')'而不是'os.walk '...? – janos 2013-02-13 23:18:37

回答

1

這並不完全清楚你想做什麼,但我可以提供一個例子,(我認爲)做了足夠的事情,你可以弄清楚如何做你想做的:在每個目錄中打印第三個文件的路徑名名爲「anyname」這正是下面的頂部兩個層次:

for dirpath, dirnames, filenames in os.walk(top): 
    depth = os.path.relpath(dirpath, top).count(os.pathsep) 
    if depth == 2 and os.path.basename(dirpath) == "anyname": 
     print(os.path.join(dirpath, filenames[2])) 

你可以讓這個更受修剪walk有效地連看都不看目錄超過2深:

for dirpath, dirnames, filenames in os.walk(top): 
    depth = os.path.relpath(dirpath, top).count(os.pathsep) 
    if depth == 2: 
     if os.path.basename(dirpath) == "anyname": 
      print(os.path.join(dirpath, filenames[2])) 
     dirnames.clear() 

或者,甚至更有效率,但更多compl修剪所有未命名爲「anyname」的深度2目錄:

for dirpath, dirnames, filenames in os.walk(top): 
    depth = os.path.relpath(dirpath, top).count(os.pathsep) 
    if depth == 1: 
     dirnames[:] = ["anyname"] if "anyname" in dirnames else [] 
    elif depth == 2: 
     print(os.path.join(dirpath, filenames[2])) 
     dirnames.clear() 
相關問題