2009-12-13 45 views
1

我正在創建一個腳本來爲我的一個朋友創建新的文件夾層次結構。有大約一千個客戶,所以腳本會節省大量的時間。我有一切幾乎工作,我沒有的部分是這個。For Loop,os.listdir()無法正常工作

yearList = os.listdir(driveLetter + clientName) 
for year in yearList: 
    os.chdir(year) 
    os.mkdir('Folder One') 
    os.mkdir('Folder Two') 
    os.mkdir('Folder Three') 

在此,對於子文件夾的作品,就像這樣:

# Create folders under 'Folder One' 
    os.chdir(driveLetter + clientName + '\\' + year + '\Folder One') 
    os.mkdir('Sub Folder One') 
    os.mkdir('Sub Folder Two') 

2005年是yearList列表中的第一個元素。這運行正常的2005年,但我得到這個錯誤:

WindowsError: [Error 2] The system cannot find the file specified: '2006' 

這將真正幫助我的朋友了,所以我非常積極地做(和漂亮[閱讀:很]新的編程)

感謝您提供任何幫助

+0

對不起,我不認爲我是很清楚的。目錄yearList的內容正在尋找其中的目錄2005,2006,2007,2008,2009和2010 – Dan 2009-12-13 04:44:27

回答

1

for year in yearList循環中,您切換到年份的子目錄,但可能永遠不會再離開它。因此,在第一次迭代中,您輸入「2005」子目錄,在第二次迭代中,您仍然在該子目錄中。然後你會得到一個錯誤,即沒有「2006」目錄(在當前的「2005」目錄中)。

可以解決,通過在循環結束時再次留下子目錄:

for year in yearList: 
    os.chdir(year) 
    ... 
    os.chdir('..') 
+1

男人,你們真酷。非常感謝你:) – Dan 2009-12-13 05:00:30

0

後你做一個CHDIR,當前目錄切換到子目錄,所以你不能移動到另一個子目錄(第一個的兄弟)稍後使用它的名字。使用絕對路徑可以解決您的問題。

嘗試

os.chdir(os.path.join(driveLetter, clientName, year)) 

移動回父目錄os.chdir("..")移動到兄弟也工作了。

作爲便箋,最好使用os.path.join(driveLetter, clientName, year, "Folder One")而不是driveLetter + clientName + '\\' + year + '\Folder One'。它會讓你的代碼也可以在其他操作系統上運行。我會爭辯一點可讀性。

+0

非常感謝你的提示。會upvote,如果我有足夠的權力這樣做 – Dan 2009-12-13 04:59:54

+0

偉大工程,再次感謝:) – Dan 2009-12-13 05:07:01

0

我還沒有在windows上測試過這個,但os.listdir(...)返回一個包含給定目錄中每個項目名稱的列表(在你的情況下,它是文件夾)。請記住,這不是絕對路徑,所以當你切換到子目錄時,你不能只用os.chdir()與下一個項目回來。你必須要麼去了一個目錄,如下所示:

os.chdir('..') 

,或者使用不同的功能來跟蹤的絕對路徑。

而且,在這一行:

os.chdir(driveLetter + clientName + '\\' + year + '\Folder One') 

你不應該被轉義'\Folder One'\

+0

感謝您的幫助,爲所有人+1 +1 – Dan 2009-12-13 05:02:19