2011-12-12 165 views
0

我試圖讓自制路徑導航功能工作 - 基本上我需要通過一個文件夾,並探索其中的每個文件夾,在每個文件夾內運行一個功能。Python:os.chdir()不在for循環中工作?

當我嘗試更改for循環中的目錄時,出現問題。我有這個「findDirectories」函數:

def findDirectories(list): 
    for files in os.listdir("."): 
     print (files) 
     list.append(files) 
     os.chdir("y") 

最後一行導致問題。如果我刪除它,該函數只是編譯該文件夾中所有文件夾的列表。不幸的是,這意味着每次我下載一個文件夾時都必須運行它,我不能只運行一次。我已經指定了文件夾「y」,因爲這是一個真正的文件夾,但即使打開該文件,程序也會崩潰。在for循環之外執行os.chdir(「y」)完全沒有問題。

我是新來的Python,但不是一般的編程。我怎樣才能使這個工作,或者有更好的方法?我需要的最終結果是在該文件夾中存在的每個「* Response.xml」文件上運行一個函數,而不管它的嵌套程度如何。

+4

你爲什麼不使用'os.walk'或'os.path.walk '? –

+0

「程序崩潰」是什麼意思?可能你會得到一些錯誤信息? – sth

+0

你究竟想做什麼?正如在一個答案中指出的那樣,只要您承認,每次只更改爲'y'都是行不通的。 –

回答

1

正如丹說的,os.walk會更好。看到那裏的例子。

+0

我只是用「y」作爲例子,因爲那肯定會起作用。我沒有假設每個文件夾被稱爲「y」,而是我會使用類似os.chdir(文件)的東西。我會看看os.walk,謝謝。 – morgoe

+0

謝謝,我現在有這個工作。 – morgoe

2

那麼,你不發佈實際錯誤的追溯,但顯然它不工作,因爲你已經指定y作爲相對路徑。

因此它可能是能夠在循環的第一次迭代更改爲y,但在第二個它會試圖更改爲子目錄y這也被稱爲y

,你可能沒有。

你想要做類似

import os 

for dirName, subDirs, fileNames in os.walk(rootPath): 
    # its not clear which files you want, I assume anything that ends with Response.xml? 
    for f in fileNames: 
     if f.endswith("Response.xml"): 
      # this is the path you will want to use 
      filePath = os.path.join(dirName, f) 

      # now do something with it! 
      doSomethingWithFilePath(filePath) 

那是未經檢驗的,但你有想法...