检索文件路径的尾部

时间:2011-08-21 22:57:10

标签: python file directory filepath file-manipulation

我找不到有效的方法来做到这一点。描述我想要做的事情的最好方法是通过示例,所以我们去哪里(假设/ bar /是父母):

C:\foo\bar\baz\text.txt

将成为我的道路。我对路径的顶级父目录的所有内容感兴趣。我需要的是一个可以做到这一点的脚本。换句话说,我只想抓住

\bar\baz\text.txt

Split对我不起作用。它将拆分文件和路径,但它不会像这样给出输出。是否有内置功能我缺少或我是SOL?谢谢!

7 个答案:

答案 0 :(得分:1)

您可以随时使用string.split()

>>> print '\\' + path.split('\\', 2)[-1]
\bar\baz\text.txt

答案 1 :(得分:1)

当你说“顶级父目录”时,我不确定你的意思。您的顶级目录是C:\。什么?如果您尝试获取以当前工作目录的父目录开头的相对路径,请尝试以下操作:

import os.path
os.path.relpath("C:\\foo\\bar\\baz\\text.txt", os.path.dirname(os.path.realpath('..')))

答案 2 :(得分:1)

不确定你想要什么,但你可以使用鲜为人知的 rsplit ,它从字符串的右侧分开。

>>> filepath = r"C:\foo\bar\baz\text.txt"
>>> directories_deep = 3
>>> os.path.sep.join(filepath.rsplit(os.path.sep, directories_deep)[-directories_deep:])
'bar\\baz\\text.txt'

答案 3 :(得分:1)

我创建了一个辅助函数来完成这项工作:

import os
def get_path_tail(path, tail_length = 1):
    assert isinstance(tail_length, int)
    if tail_length == 1:
        return path.split('/')[-tail_length]
    elif tail_length > 1:
        return os.path.join(*path.split('/')[-tail_length:])

行为:

>>> path = os.path.join('C:','foo','bar', 'baz','text.txt')
>>> print get_path_tail(path, tail_length = 3)

    bar/baz/text.txt

它的签名就像answer ForeverWintr中的签名一样,但由于我还没有足够的声誉,我无法评论他的回答。 :)

答案 4 :(得分:0)

In [44]: path = 'a/b/c'

In [45]: back = os.path.relpath('.', os.path.join(path, '..'))

In [46]: back
Out[46]: '..\\..'

In [47]: tail = os.path.relpath(path, os.path.join(path, back)))

In [48]: tail
Out[48]: 'b\\c'

Aka不是我所知道的。

答案 5 :(得分:0)

我会保持简单。将cwd和输入路径转换为绝对路径,然后只使用startswith和切片

path = os.path.abspath(path)
#Make sure you finish curDir with a path separator
#to avoid incorrect partial matches
curDir = os.path.abspath(".") + os.path.sep
if path.startswith(curDir):
    whatYouWant = path[len(curDir) - 1:]

答案 6 :(得分:0)

以下是我解决这个问题的方法:

def gettail(path_, length):        
    elements = []
    for i in range(length):
        s = os.path.split(path_)
        elements.append(s[1])
        path_ = s[0] 

    outpath = elements.pop()
    while elements:
        outpath = os.path.join(outpath, elements.pop())
    return outpath

输出:

>>> print gettail(r"C:\foo\bar\baz\text.txt", 3)
    'bar\\baz\\text.txt'

建议/改进欢迎。