Почему str.lstrip накладывает дополнительный символ?
Python 2.6 (trunk:66714:66715M, Oct 1 2008, 18:36:04)
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> path = "/Volumes/Users"
>>> path.lstrip('/Volume')
's/Users'
>>> path.lstrip('/Volumes')
'Users'
>>>
Я ожидаю, что вывод path.lstrip('/Volumes')
должен быть /Users
Ответы
Ответ 1
lstrip
основан на символах, он удаляет все символы из левого конца, которые находятся в этой строке.
Чтобы проверить это, попробуйте следующее:
"/Volumes/Users".lstrip("semuloV/")
Так как/является частью строки, она удаляется.
Я подозреваю, что вам нужно использовать нарезку:
if s.startsWith("/Volumes"):
s = s[8:]
но, надеюсь, кто-то с более глубоким знанием библиотеки Python может дать вам лучший вариант.
Ответ 2
Полоса основана на символах. Если вы пытаетесь выполнить манипуляции с курсом, вы должны взглянуть на os.path
>>> os.path.split("/Volumes/Users")
('/Volumes', 'Users')
Ответ 3
Аргумент, переданный в lstrip
, берется как набор символов!
>>> ' spacious '.lstrip()
'spacious '
>>> 'www.example.com'.lstrip('cmowz.')
'example.com'
См. также документацию
Возможно, вы захотите использовать str.replace()
str.replace(old, new[, count])
# e.g.
'/Volumes/Home'.replace('/Volumes', '' ,1)
Возвращает копию строки со всеми вхождениями подстроки old, замененной на новую. Если задан параметр необязательного аргумента, заменяются только первые экземпляры счетчика.
Для путей вы можете использовать os.path.split()
. Он возвращает список элементов пути.
>>> os.path.split('/home/user')
('/home', '/user')
К вашей проблеме:
>>> path = "/vol/volume"
>>> path.lstrip('/vol')
'ume'
В приведенном выше примере показано, как работает lstrip()
. Он удаляет пустую форму '/vol' слева. Затем начинается снова...
Итак, в вашем примере он полностью удалил '/Volumes' и начал удаление '/'. Он удалил только "/", поскольку после этой косой черты не было "V".
НТН
Ответ 4
lstrip doc говорит:
Return a copy of the string S with leading whitespace removed.
If chars is given and not None, remove characters in chars instead.
If chars is unicode, S will be converted to unicode before stripping
Итак, вы удаляете каждый символ, содержащийся в данной строке, включая символы "s" и "/".
Ответ 5
Вот примитивная версия lstrip (которую я написал), которая может помочь вам разобраться:
def lstrip(s, chars):
for i in range len(s):
char = s[i]
if not char in chars:
return s[i:]
else:
return lstrip(s[i:], chars)
Таким образом, вы можете видеть, что каждое появление символа в символах удаляется до тех пор, пока не встретится символ, который не находится в символах. Как только это произойдет, удаление прекратится, и остальная часть строки будет просто возвращена.