python:如何获取父目录的绝对路径

python:如何获取父目录的绝对路径,python,path,glob,Python,Path,Glob,我在a/b/c/d/e/f/x.xml位置有一个文件。我需要找到目录d的绝对路径,即在层次结构中匹配目录名d的父目录 我可以通过os.path.abspath(\uu file\uuu)获取文件名的当前目录。我已经看过和的文档,但无法确定如何使用它们 有人能帮忙吗 编辑: 多亏了下面所有的答案,我才有了一条直线 os.path.join(*list(itertools.takewhile(lambda x: x != 'd', pathlib.PurePath(os.getcwd()).part

我在a/b/c/d/e/f/x.xml位置有一个文件。我需要找到目录
d
的绝对路径,即在层次结构中匹配目录名
d
的父目录

我可以通过
os.path.abspath(\uu file\uuu)
获取文件名的当前目录。我已经看过和的文档,但无法确定如何使用它们

有人能帮忙吗

编辑:

多亏了下面所有的答案,我才有了一条直线

os.path.join(*list(itertools.takewhile(lambda x: x != 'd', pathlib.PurePath(os.getcwd()).parts)))
我还需要将实际的目录名附加到它,即,输出应该是
a/b/c/d
。下面是一个丑陋的解决方案(使用os.path.join两次)。是否有人可以修复它(通过在一行中向迭代器或列表添加元素:)


您可以使用
\uuu文件的
abspath
上的
dirname
来获取x.xml的完整路径

os.path.dirname(os.path.abspath(_文件__))

然后可以提取路径的任何部分。如果要获取
d
文件夹:

import itertools
res = '/'.join(itertools.takewhile(lambda x: x != 'd', p.parts))

您可以使用
\uuu文件的
abspath
上的
dirname
来获取x.xml的完整路径

os.path.dirname(os.path.abspath(_文件__))

然后可以提取路径的任何部分。如果要获取
d
文件夹:

import itertools
res = '/'.join(itertools.takewhile(lambda x: x != 'd', p.parts))
使用regexp和cut:

import re
import os
mydir_regexp = re.compile('dirname')
abs_path = os.path.abspath(__file__)
s = re.search(mydir_regexp, abs_path)

my_match = abs_path[:abs_path.index(s.group())+len(s.group())]
使用regexp和cut:

import re
import os
mydir_regexp = re.compile('dirname')
abs_path = os.path.abspath(__file__)
s = re.search(mydir_regexp, abs_path)

my_match = abs_path[:abs_path.index(s.group())+len(s.group())]

您可以使用
pathlib
,并:


您可以使用
pathlib
,并:


假设您当前目录中有一个文件,您可以使用
abspath
获取它的绝对路径(从根开始):

path = os.path.abspath(filename)
神奇的单词是
os.path.split
,它将路径名拆分为最后一个组件和头部(前面的所有内容)。因此,要获得
d
之前的绝对路径,只需迭代组件:

def findinit(path, comp):
    while (len(path) > 1):
        t = os.path.split(path)
        if t[1] == comp:
            return t[0]
        path = t[0]
    return None
您可以控制
findinit('/a/b/c/d/e/f/x.xml')
按预期提供
/a/b/c


或者,如果要使用
pathlib
模块,可以在
部分中搜索特定组件:

def findinit(path, comp):
    p = pathlib.PurePath(path)
    i = p.parts.index(comp)
    if i != -1:
        return pathlib.PurePath(*p.parts[:i])
    return None

假设您当前目录中有一个文件,您可以使用
abspath
获取它的绝对路径(从根开始):

path = os.path.abspath(filename)
神奇的单词是
os.path.split
,它将路径名拆分为最后一个组件和头部(前面的所有内容)。因此,要获得
d
之前的绝对路径,只需迭代组件:

def findinit(path, comp):
    while (len(path) > 1):
        t = os.path.split(path)
        if t[1] == comp:
            return t[0]
        path = t[0]
    return None
您可以控制
findinit('/a/b/c/d/e/f/x.xml')
按预期提供
/a/b/c


或者,如果要使用
pathlib
模块,可以在
部分中搜索特定组件:

def findinit(path, comp):
    p = pathlib.PurePath(path)
    i = p.parts.index(comp)
    if i != -1:
        return pathlib.PurePath(*p.parts[:i])
    return None

我终于找到了唯一的班轮:

os.path.join(*list(itertools.takewhile(lambda x: x != 'd', pathlib.PurePath(os.getcwd()).parts)),"d")

如果没有其他人的回答,这是不可能的。非常感谢。

我终于找到了唯一的班轮:

os.path.join(*list(itertools.takewhile(lambda x: x != 'd', pathlib.PurePath(os.getcwd()).parts)),"d")
如果没有其他人的回答,这是不可能的。非常感谢