Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 返回所有祖先/父路径的列表_Python 2.7_Filepath - Fatal编程技术网

Python 2.7 返回所有祖先/父路径的列表

Python 2.7 返回所有祖先/父路径的列表,python-2.7,filepath,Python 2.7,Filepath,我正在寻找一种更具python风格的方法来返回给定路径中的所有父路径的列表(自包含) 例如,假设: "/dir1/dir2/dir3" 返回: ["/dir1", "/dir1/dir2", "/dir1/dir2/dir3"] 到目前为止,我基本上在做: import os path = os.path.normpath(path) path_parts = path.split(os.sep) 然后在零件上迭代以重建列表。我忍不住觉得这是一个难看的难题…我不知道您是否已经在使用列表理解

我正在寻找一种更具python风格的方法来返回给定路径中的所有父路径的列表(自包含)

例如,假设:

"/dir1/dir2/dir3"
返回:

["/dir1", "/dir1/dir2", "/dir1/dir2/dir3"]
到目前为止,我基本上在做:

import os
path = os.path.normpath(path)
path_parts = path.split(os.sep)

然后在零件上迭代以重建列表。我忍不住觉得这是一个难看的难题…

我不知道您是否已经在使用列表理解来完成它,因此,如果没有,您可以尝试以下方法:

import os

def get_branch_dirs(dir):
    levels = dir.split(os.path.sep)
    return [os.path.sep.join(levels[:i+1]+[""]) for i in range(len(levels))]

get_branch_dirs(dir="/dir1/dir2/dir3")
输出:

['/', '/dir1/', '/dir1/dir2/', '/dir1/dir2/dir3/']
如果希望dir字符串以“/”结尾,则可能需要对其进行调整



编辑:事实上,我刚刚意识到您不想列出根目录,因此请尝试以下操作:

def get_branch_dirs(dir):
    levels = dir.split(os.path.sep)
    return [os.path.sep.join(levels[:i + 1]) for i in range(len(levels))][1:]


get_branch_dirs(dir="/dir1/dir2/dir3")
输出

['/dir1', '/dir1/dir2', '/dir1/dir2/dir3']

我不知道您是否已经在使用列表理解来执行此操作,因此,如果没有,您可以尝试以下操作:

import os

def get_branch_dirs(dir):
    levels = dir.split(os.path.sep)
    return [os.path.sep.join(levels[:i+1]+[""]) for i in range(len(levels))]

get_branch_dirs(dir="/dir1/dir2/dir3")
输出:

['/', '/dir1/', '/dir1/dir2/', '/dir1/dir2/dir3/']
如果希望dir字符串以“/”结尾,则可能需要对其进行调整



编辑:事实上,我刚刚意识到您不想列出根目录,因此请尝试以下操作:

def get_branch_dirs(dir):
    levels = dir.split(os.path.sep)
    return [os.path.sep.join(levels[:i + 1]) for i in range(len(levels))][1:]


get_branch_dirs(dir="/dir1/dir2/dir3")
输出

['/dir1', '/dir1/dir2', '/dir1/dir2/dir3']

没有内置的函数可以做到这一点。所以,我想说,你所做的很好,没有内置的函数。所以,我想说,你现在做的很好。