2014-12-17 2 views
-2

Странно я встретился с этой проблемой, когда пытался извлечь содержимое из файла excel с помощью Python с использованием модуля xlrd.Почему str.lstrip будет обрезать букву e для слов, начинающихся с e, но не для других букв?

пример, как показано ниже:

Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a="text:u'ethos'" 
>>> a 
"text:u'ethos'" 
>>> a.lstrip("text:u'").rstrip("'") 
'hos' 
>>> b="text:u'weekend'" 
>>> b 
"text:u'weekend'" 
>>> b.lstrip("text:u'").rstrip("'") 
'weekend' 

клетка считывания из xlrd в тексте: «» формат и, для мне нужно получить только слово.

Хотя я, наконец, использую метод table.cell_value() для его решения. Но мне интересно, почему?

Итак, почему «выходные» работают хорошо, но для слова, такого как «этос», неправильно?

+2

Перечитайте документацию 'str.lstrip'. –

+0

Если у вас есть фиксированный набор начальных и конечных символов, рассмотрите явный фрагмент: '' text: u'weekend '"[7: -1]' – jonrsharpe

+0

@jonrsharpe Замечательное решение! Я этого не понимал! Да, это фиксированный набор стартовых символов. – sikisis

ответ

2

Вы должны внимательно посмотреть на функции lstrip https://docs.python.org/2/library/stdtypes.html#str.lstrip

возвращает копию строки с ведущими персонажами удалены. Аргумент chars - это строка, определяющая набор символов, которые нужно удалить. Если опущен или None, аргумент chars по умолчанию удаляет пробелы. Аргумент chars не является префиксом; скорее, все комбинации своих значений раздели:

Он заканчивается зачисткой из символов т, е, х,:, и и, пока он не достигнет другого характера. Для «text: u'ethos» каждый символ до «h» находится в этом списке, поэтому он удаляет их. С «text: w'weekend», так как «w» не входит в этот список, он останавливает удаление символов там.

+0

, поэтому гораздо лучше использовать некоторые методы, такие как table.cell_value(), чем писать метод lstrip самостоятельно? – sikisis

+0

Или использование регулярного выражения намного лучше, чем что-то вроде lstrip («text: u»)? – sikisis

+0

Я бы сам использовал regex. –