2011-04-16 38 views
2

我正在尋找一個簡單的方法來識別另一個字符串內的字符串的最後一個位置......例如。如果我有:file = C:\Users\User\Desktop\go.py
,我想這裁剪使file = go.py
蟒蛇發現字符串的最後一個

通常情況下,我將不得不運行C:\Users\User\Desktop\go.py通過環+發現語句,埃維一次遇到\它會問...是最後的\在字符串中? ...一旦我找到最後的\我會然後file = file[last\:len(file)]
我很想知道是否有更快更好的方法來做到這一點..最好沒有循環。
喜歡的東西文件= [file('\',最後):len(file)]
如果沒有什麼像什麼,我上面顯示... ...那麼我們可以放置[:]莫名其妙內循環。喜歡的東西file = [for i in ...:len(file)]

謝謝:)

回答

9

如果只是有關文件路徑,你可以使用os.path.basename

>>> import os 
>>> os.path.basename(file) 
'go.py' 

或者,如果你沒有在Windows上運行的代碼,你必須使用ntpath而不是os.path

+4

當處理w/filepaths時,這是最好的解決方案。但只是爲了記錄:在python中還有一個'rfind'方法:http://docs.python.org/library/stdtypes.html#str.rfind – 2011-04-16 12:24:06

+0

@OcasoProtal:你應該考慮發佈這個答案.. – 2011-04-16 12:28:40

+0

正如我所說:'rfind'對於filepaths看起來不太好,'os.path'解決方案是最好的。 – 2011-04-16 13:37:27

0

對於想要使用的路徑名操作os.path

對於這個特定的問題,你想使用os.path.basename(path)函數,它將返回路徑的最後一個組件,如果路徑以斜槓結尾(即文件夾的路徑而不是文件),則返回一個空字符串。

import os.path 

print os.path.basename("C:\Users\User\Desktop\go.py") 

給出:

go.py
5

您可以將字符串分割成一個列表,然後獲取列表的最後一個索引。

樣品:

>>> file = 'C:\Users\User\Desktop\go.py' 
>>> print(file.split('\\')[-1]) 
go.py 
+0

其他答案很好..但我喜歡你的,因爲它有更廣泛的應用...不僅在路徑字符串。 – Rhys 2011-04-16 13:00:14

+0

感謝man :)這是一個很好,乾淨的選項,不需要添加依賴項。我想如果你不得不在這種情況下處理os,那麼增加一個額外的導入將是更好的選擇。 – 2011-04-17 10:11:54

+2

您不應該拆分字符串,然後只取其一部分。這是更慢,更混亂。一個簡單得多的方法是'x [x.rfind('\\')+ 1:]' 順便說一句,你可能想避免爲變量名命名'file',因爲它會影響內置的文件對象。 – 2012-04-01 04:18:04

4

我對文件路徑與Felix同意應使用os.path.basename處理。但是,您可能需要查看內置的字符串函數rpartition

>>> file = 'C:\Users\User\Desktop\go.py' 
>>> before, separator, after = file.rpartition('\\') 
>>> before 
'C:\\Users\\User\\Desktop' 
>>> separator 
'\\' 
>>> after 
'go.py' 

另外還有rfind功能,讓你的子字符串的最後一個索引。

>>> file.rfind('\\') 
21 

我意識到我對晚會有點遲,但是因爲這是搜索例如電視節目的最佳結果之一。 「在Google上找到最後一個str python」,我認爲它可以幫助某人添加這些信息。

2

對於通用情況(因爲OP表示他們喜歡拆分解決方案的泛化)......嘗試rfind(str)函數。

"myproject-version2.4.5.customext.zip".rfind(".") 

編輯:道歉,我還沒有意識到這個線程是多少年......: -/