正在检索文件路径的尾部



我找不到有效的方法来做到这一点。描述我试图做什么的最好方法是通过例子,所以我们要去哪里(假设/bar/是父级(:

C:foobarbaztext.txt

将是我的路。我对所有东西都感兴趣,直到路径的顶级父目录。我需要的是一个能做到这一点的剧本。换句话说,我只想获取

barbaztext.txt

拆分对我不起作用。它会拆分文件和路径,但不会给出这样的输出。我是缺少内置功能还是SOL?谢谢

您可以始终使用string.split():

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

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

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

我不知道你说"顶级父目录"是什么意思。您的顶级目录是C:。什么的家长?如果你试图获得一个从当前工作目录的父目录开始的相对路径,请尝试以下操作:

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

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

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

它的签名就像ForeverWintr的回答中那样,但我无法评论他的回答,因为我还没有足够的声誉。:(

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'

阿卡不,我不知道。

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

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:]

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

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:foobarbaztext.txt", 3)
    'bar\baz\text.txt'

欢迎提出建议/改进。

相关内容

  • 没有找到相关文章

最新更新