我試圖編寫一個處理程序,對各個子目錄下的文件起作用,但是當我的腳本可以看到這些文件時,它無法對它們執行任何操作,因爲它無法執行組裝他們的路徑。正確使用os.path和os.join
的問題部分來源於此循環:
for (path, dirs, files) in os.walk("data/"):
for image in files:
#do something to the image
現在,腳本工作在data
目錄的第一級,但未能在data
的子目錄工作。
我嘗試使用os.path.join()
:
for (path, dirs, files) in os.walk("data/"):
print os.path.join(path, dirs)
但是,這將引發以下:
Traceback (most recent call last):
File "bench.py", line 26, in <module>
print os.path.join(path, dirs)
File "/usr/lib/python2.7/posixpath.py", line 75, in join
if b.startswith('/'):
AttributeError: 'list' object has no attribute 'startswith'
總之,我希望做的是裝配到包括圖像從data
路徑data
的子目錄。這樣做的最佳做法是什麼?
當你得到這樣的異常時,通常是因爲你想要做一些像'dirs'這樣的值的列表,而不是每個值。 (如果你沒有意識到'dirs'是一個列表,那麼這個例外應該會引起這個可能性,並且你可以嘗試'print dirs'或'print type(dirs)'來查明。)你可以解決這個問題通過使用for循環,列表理解,map等等,就像mgilson的答案所表明的那樣,一旦你意識到這就是你想要做的。 – abarnert 2013-03-04 20:04:31