2015-08-17 1 views
1

У меня есть программа в Python 2.7, которая обрабатывает некоторые строки. Если некоторые строки заканчиваются буквой «l» (а не «L», просто «l»), rstrip удаляет этот «l», когда это не должно. Пример кода:Странное поведение функции rstrip в python с буквой «l»

file=u'isabel.algo'#final "l" 
str="/"+file+"/"+file.rstrip(".algo")+".py" 
print str 
file=u'isabeL.algo'#final "L" 
str="/"+file+"/"+file.rstrip(".algo")+".py" 
print str 
file='isabel.algo'#non unicode 
str="/"+file+"/"+file.rstrip(".algo")+".py" 
print str 

Какие результаты в:

/isabel.algo/isabe.py 
/isabeL.algo/isabeL.py 
/isabel.algo/isabe.py 

Как можно видеть, когда "файл" заканчивается на "L" не имеет никаких проблем. Но когда он заканчивается на «l», конечная строка неверна (это должно быть «isabel.py»)

Любая помощь будет оценена по достоинству. Заранее спасибо.

ответ

4

Вы должны обратиться к python documentation от rstrip!

rstrip принимает список символов, которые вы хотите удалить с конца строки. Таким образом, file.rstrip(".algo") разделит все символы «.», «A», «l», «g» и «o» в правом конце строки.

Потенциальное исправление для этой проблемы было бы split вашей строкой, используя '.' в качестве разделителя:

str="/"+file+"/"+file.split(".")[0]+".py" 

Или, как предложил chromano в комментариях вы можете использовать replace метод:

str="/"+file+"/"+file.replace(".algo",".py") 
+0

Использование .Привернуть затем рекомендуется. – Carlos

+0

Обратите внимание, что 'haystack.replace ('needle', 'foo')' заменит иглу в любой точке стога сена, причем не только в конце. С регулярным выражением вы можете выразить это условие. –

+0

@chromano Я добавил ваше предложение к ответу. –