2014-01-08 65 views
1

我想將cwd更改爲特定的文件夾。 文件夾名稱是已知的;然而,它的路徑會有所不同。更改爲已知的目錄名稱,但未知的Python中的絕對路徑

我試圖以下,但似乎無法得到我所期待的:

absolute_path = os.path.abspath(folder_name) 
directory_path = os.path.dirname(absolute_path) 
os.chdir(directory_path) 

這不會做什麼我要找的,因爲它是保持原來的CWD到的.py文件從中運行。我已經嘗試在第一個代碼塊之前添加os.chdir(os.path.expanduser("~"));但是,它只是創建/ home/user/folder_name的絕對路徑。

當然,如果有一個簡單的導入,我可以使用,我會開放給任何東西。

什麼是正確的方式來獲得具有特定名稱的所有文件夾的路徑?

+0

你如何獲得文件夾的路徑,我很困惑。 –

+0

這個問題在任何人都可以回答之前需要更多的澄清(我甚至不理解你正在嘗試做什麼......)你是否試圖在整個系統中搜索一個文件夾? –

+5

哪裏可以*文件夾是?如果名稱是「foo」,會發生什麼情況,但同時存在「/ a/foo」和「/ b/foo」? –

回答

3
def find_folders(start_path,needle): 
    for cwd, folders, files,in os.walk(start_path): 
     if needle in folders: 
      yield os.path.join(cwd,needle) 

for path in find_folders("/","a_folder_named_x"): 
    print path 

這一切正在做的是從給定的起始路徑走你的目錄結構,並發現了一個名爲針

中的示例文件夾中的所有出現它開始在系統的根文件夾並期待名爲「a_folder_named_x」 ......被forwarned這可能需要一段時間才能運行,如果你需要搜索整個系統文件夾...

+2

如果目錄由於權限而無法訪問(例如,我可能在'〜you/there'上有rx訪問,並且在'〜you'上有x個訪問,但在'〜you'上沒有r訪問, ,這意味着我無法從頂部查找「你/那裏」,即使我發現它可以使用它)。當然這不是這個代碼的問題,而是POSIX風格的權限和文件系統的一個基本特徵。 – abarnert

+0

謝謝,我認識到運行時間是一個問題。 –

+0

這是非常重要的,因爲在某些系統上,你有x但不能訪問'/ home'或'/ Users'或等價物,這意味着你甚至不會在你自己的家中以這種方式找到目錄。對於像'/ mnt'或'/ Volumes'或類似的東西也是如此,這意味着你不會在你裝載的外部驅動器或共享上找到目錄。等等。 – abarnert

3

你要明白,abspath接受相對路徑(這可能只是成爲一個文件名),並給你等價借給絕對(完整)路徑名。相對路徑名是從當前目錄開始的路徑;不涉及搜索,因此它始終指向一個位置(可能存在也可能不存在)。

什麼真正需要的是尋找下一個目錄樹,開始~或任何目錄是有道理的,你的情況,直到找到與所請求的名稱的文件夾。這就是@Joran的代碼所做的。

+0

好工作解釋他最近怎麼了:) –

+0

是的,謝謝。 –

相關問題