2010-01-27 57 views
1

我有我的Python應用程序的字符串看起來是這樣的:減少在Python中的特定點

test1/test2/foo/ 

每次我得到這樣一個字符串,我想減少它,從尾部開始,減少直至拳頭「/」已達到。

test1/test2/ 

更多的例子:

foo/foo/foo/foo/foo/ => foo/foo/foo/foo/ 
test/test/   => test/ 
how/to/implement/this => how/to/implement/ 

我怎樣才能在Python實現這一點?

在此先感謝!

回答

5
newString = oldString[:oldString[:-1].rfind('/')] 
# strip out trailing slash ----^  ^---- find last remaining slash 
+0

或者,您可以使用'.rfind('/',0,-2)'。 – kennytm 2010-01-27 08:33:15

+0

太棒了!非常感謝!!! – Neverland 2010-01-27 11:13:10

+2

這確實是最差的答案之一。 – SilentGhost 2010-01-27 14:05:40

5

str.rsplit()maxsplit的論點。或者如果這是一條路徑,請查看os.pathurlparse

6

聽起來像os.path.dirname函數可能是你要找的。您可能需要調用它不止一次:

>>> import os.path 
>>> os.path.dirname("test1/test2/") 
'test1/test2' 
>>> os.path.dirname("test1/test2") 
'test1' 
+0

'dirname'通常很有用,但在這種情況下,用戶希望'test2'在兩種情況下都被刪除。 – 2010-01-27 09:02:00

1
>>> import os 
>>> path="how/to/implement/this" 
>>> os.path.split(path) 
('how/to/implement', 'this') 
>>> os.path.split(path)[0] 
'how/to/implement' 
+0

這僅適用於此特定示例(字符串)。但它不是一個通用的解決方案。 – Neverland 2010-01-27 11:10:16

+1

當使用此方法時,什麼是斷開的字符串示例? – ghostdog74 2010-01-27 11:33:53

0
>>> os.path.split('how/to/implement/this'.rstrip('/')) 
('how/to/implement', 'this') 
>>> os.path.split('how/to/implement/this/'.rstrip('/')) 
('how/to/implement', 'this') 
0
'/'.join(s.split('/')[:-1]+['']) 
+1

大約有6種技術比這更好。 – 2010-01-27 09:43:36

0

如果你的意思是 「/」 作爲路徑分隔符,你想要的功能是:

os.path.dirname(your_argument) 

如果不是,那麼你想要:

def your_function(your_argument): 
    result= your_argument.rstrip("/").rpartition("/")[0] 
    if result: 
     return result + "/" 
    return result 

請指定「test /」作爲參數時的結果應該是「/」還是「」?我在上面的代碼中假設了第二個。

+0

「/」是路徑分隔符。 – Neverland 2010-01-29 10:42:20