2016-08-08 85 views
0

從提供的路徑中查找子文件夾的最常用pythonic方法是什麼?查找文件夾的pythonic方式

import os 

def get_folder(f, h): 
    pathList = f.split(os.sep) 
    sourceList = h.split(os.sep) 

    src = set(sourceList) 
    folderList = [x for x in pathList if x not in src] 

    return folderList[0] 


print get_folder("C:\\temp\\folder1\\folder2\\file.txt", "C:\\temp") # "folder1" correct 
print get_folder("C:\\temp\\folder1\\file.txt", "C:\\temp") # "folder1" correct 
print get_folder("C:\\temp\\file.txt", "C:\\temp") # "file.txt" fail should be "temp" 

在上面的例子中,我在「文件夾2」中有一個file.txt文件。提供路徑「C:\ temp」作爲起點。

我想從中返回子文件夾;如果有問題的文件在源文件夾中,它應該返回源文件夾。

+0

你應該使用類似'os.path.walk'通過迭代路徑的每個分支的所有文件行走,看看這個答案http://stackoverflow.com/questions/2860153/how -do-i-get-the-parent-directory-in-python如何在找到文件的情況下獲取父文件夾,否則繼續上去。 –

+0

也使用'os.path.join'而不是手動發送字符串到函數 –

回答

0

試試這個。我不知道你爲什麼說folder1第一個例子是正確的,是不是folder2?我也在Mac上,所以os.sep不適合我,但你可以適應這一點。

import os 

def get_folder(f, h): 
    pathList = f.split("\\") 

    previous = None 

    for index, obj in enumerate(pathList): 
     if obj == h: 
      if index > 0: 
       previous = pathList[index - 1] 

    return previous 


print get_folder("C:\\temp\\folder1\\folder2\\file.txt", "file.txt") # "folder2" correct 
print get_folder("C:\\temp\\folder1\\file.txt", "file.txt") # "folder1" correct 
print get_folder("C:\\temp\\file.txt", "file.txt") # "file.txt" fail should be "temp" 
+0

@Ghoul Fool做了這個工作嗎? –