我無法找到有效的方法來完成此操作。最好的辦法來形容什麼,我試圖做的是通過實例,所以我們去哪裏(假設/酒吧/是父):檢索文件路徑的尾端
C:\foo\bar\baz\text.txt
將是我的道路。我對直到路徑的頂級父目錄的所有內容感興趣。我需要的是一個能夠做到這一點的腳本。換句話說,我只想抓住
\bar\baz\text.txt
斯普利特不適合我。它會分割文件和路徑,但不會像這樣輸出。是否有我失蹤的內置功能,或者我是SOL?謝謝!
我無法找到有效的方法來完成此操作。最好的辦法來形容什麼,我試圖做的是通過實例,所以我們去哪裏(假設/酒吧/是父):檢索文件路徑的尾端
C:\foo\bar\baz\text.txt
將是我的道路。我對直到路徑的頂級父目錄的所有內容感興趣。我需要的是一個能夠做到這一點的腳本。換句話說,我只想抓住
\bar\baz\text.txt
斯普利特不適合我。它會分割文件和路徑,但不會像這樣輸出。是否有我失蹤的內置功能,或者我是SOL?謝謝!
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不,我不知道。
我會保持簡單。都轉換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:]
你總是可以使用string.split()
:
>>> print '\\' + path.split('\\', 2)[-1]
\bar\baz\text.txt
我不知道你是什麼意思時,你說「頂級父目錄「。您的頂級目錄是C:\
。什麼家長?如果你想獲得與當前工作目錄的父目錄開始的相對路徑,試試這個:
import os.path
os.path.relpath("C:\\foo\\bar\\baz\\text.txt", os.path.dirname(os.path.realpath('..')))
不知道你想要什麼,但你可以使用鮮爲人知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'
以下是我解決了這個問題:
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'
建議/改進的歡迎。
我創建了一個輔助函數,沒有工作:
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的answer,但我不能對他的回答評論因爲我還沒有足夠的聲譽。 :)