Как изменить регистр букв python

I have problem in changing a string into uppercase with Python. In my research, I got string.ascii_uppercase but it doesn't work. The following code: >>s = 'sdsd' >>s.ascii_uppercase

I have problem in changing a string into uppercase with Python. In my research, I got string.ascii_uppercase but it doesn’t work.

The following code:

 >>s = 'sdsd'
 >>s.ascii_uppercase

Gives this error message:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'str' object has no attribute 'ascii_uppercase'

My question is: how can I convert a string into uppercase in Python?

Kai - Kazuya Ito's user avatar

asked Feb 13, 2012 at 7:48

gadss's user avatar

2

Use str.upper():

>>> s = 'sdsd'
>>> s.upper()
'SDSD'

See String Methods.

Tomerikoo's user avatar

Tomerikoo

17.6k16 gold badges41 silver badges59 bronze badges

answered Feb 13, 2012 at 7:51

Dan D.'s user avatar

Dan D.Dan D.

72.3k14 gold badges101 silver badges122 bronze badges

4

To get upper case version of a string you can use str.upper:

s = 'sdsd'
s.upper()
#=> 'SDSD'

On the other hand string.ascii_uppercase is a string containing all ASCII letters in upper case:

import string
string.ascii_uppercase
#=> 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

answered Feb 13, 2012 at 7:56

KL-7's user avatar

KL-7KL-7

45k9 gold badges86 silver badges74 bronze badges

to make the string upper case — just simply type

s.upper()

simple and easy! you can do the same to make it lower too

s.lower()

etc.

answered Jun 27, 2016 at 15:50

Katie T's user avatar

Katie TKatie T

3412 silver badges6 bronze badges

s = 'sdsd'
print (s.upper())
upper = raw_input('type in something lowercase.')
lower = raw_input('type in the same thing caps lock.')
print upper.upper()
print lower.lower()

Community's user avatar

answered Jul 16, 2014 at 0:49

H CODE's user avatar

H CODEH CODE

1991 silver badge2 bronze badges

1

for making uppercase from lowercase to upper
just use

"string".upper()

where "string" is your string that you want to convert uppercase

for this question concern it will like this:

s.upper()

for making lowercase from uppercase string
just use

"string".lower()

where "string" is your string that you want to convert lowercase

for this question concern it will like this:

s.lower()

If you want to make your whole string variable use

s="sadf"
# sadf

s=s.upper()
# SADF

Keyur Potdar's user avatar

Keyur Potdar

7,0896 gold badges25 silver badges40 bronze badges

answered Sep 1, 2016 at 16:36

Pawanvir singh's user avatar

For questions on simple string manipulation the dir built-in function comes in handy. It gives you, among others, a list of methods of the argument, e.g., dir(s) returns a list containing upper.

answered Oct 15, 2018 at 22:28

bartfrenk's user avatar

bartfrenkbartfrenk

1033 silver badges4 bronze badges

For converting first letter of each word into capital in a sentence

s = 'this is a sentence'

str.title(s)

>>> 'This Is A Sentence'

answered Sep 14, 2021 at 5:58

coderina's user avatar

coderinacoderina

1,44511 silver badges19 bronze badges

You can use capitalize() to make the 1st letter uppercase as shown below:

test = "this is a sentence."

print(test.capitalize()) # Here

Output:

This is a sentence.

answered Dec 15, 2022 at 13:54

Kai - Kazuya Ito's user avatar

I have problem in changing a string into uppercase with Python. In my research, I got string.ascii_uppercase but it doesn’t work.

The following code:

 >>s = 'sdsd'
 >>s.ascii_uppercase

Gives this error message:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'str' object has no attribute 'ascii_uppercase'

My question is: how can I convert a string into uppercase in Python?

Kai - Kazuya Ito's user avatar

asked Feb 13, 2012 at 7:48

gadss's user avatar

2

Use str.upper():

>>> s = 'sdsd'
>>> s.upper()
'SDSD'

See String Methods.

Tomerikoo's user avatar

Tomerikoo

17.6k16 gold badges41 silver badges59 bronze badges

answered Feb 13, 2012 at 7:51

Dan D.'s user avatar

Dan D.Dan D.

72.3k14 gold badges101 silver badges122 bronze badges

4

To get upper case version of a string you can use str.upper:

s = 'sdsd'
s.upper()
#=> 'SDSD'

On the other hand string.ascii_uppercase is a string containing all ASCII letters in upper case:

import string
string.ascii_uppercase
#=> 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

answered Feb 13, 2012 at 7:56

KL-7's user avatar

KL-7KL-7

45k9 gold badges86 silver badges74 bronze badges

to make the string upper case — just simply type

s.upper()

simple and easy! you can do the same to make it lower too

s.lower()

etc.

answered Jun 27, 2016 at 15:50

Katie T's user avatar

Katie TKatie T

3412 silver badges6 bronze badges

s = 'sdsd'
print (s.upper())
upper = raw_input('type in something lowercase.')
lower = raw_input('type in the same thing caps lock.')
print upper.upper()
print lower.lower()

Community's user avatar

answered Jul 16, 2014 at 0:49

H CODE's user avatar

H CODEH CODE

1991 silver badge2 bronze badges

1

for making uppercase from lowercase to upper
just use

"string".upper()

where "string" is your string that you want to convert uppercase

for this question concern it will like this:

s.upper()

for making lowercase from uppercase string
just use

"string".lower()

where "string" is your string that you want to convert lowercase

for this question concern it will like this:

s.lower()

If you want to make your whole string variable use

s="sadf"
# sadf

s=s.upper()
# SADF

Keyur Potdar's user avatar

Keyur Potdar

7,0896 gold badges25 silver badges40 bronze badges

answered Sep 1, 2016 at 16:36

Pawanvir singh's user avatar

For questions on simple string manipulation the dir built-in function comes in handy. It gives you, among others, a list of methods of the argument, e.g., dir(s) returns a list containing upper.

answered Oct 15, 2018 at 22:28

bartfrenk's user avatar

bartfrenkbartfrenk

1033 silver badges4 bronze badges

For converting first letter of each word into capital in a sentence

s = 'this is a sentence'

str.title(s)

>>> 'This Is A Sentence'

answered Sep 14, 2021 at 5:58

coderina's user avatar

coderinacoderina

1,44511 silver badges19 bronze badges

You can use capitalize() to make the 1st letter uppercase as shown below:

test = "this is a sentence."

print(test.capitalize()) # Here

Output:

This is a sentence.

answered Dec 15, 2022 at 13:54

Kai - Kazuya Ito's user avatar

Функции обрабатывающие регистр символов в строке


Содержание

  • 1. Функция str.capitalize(). Первый символ строки становится прописным
  • 2. Функция str.casefold(). Вернуть свернутую копию строки
  • 3. Функция str.lower(). Преобразование регистра символов
  • 4. Функция str.swapcase(). Вернуть копию строки с преобразованием строчных символов в заглавные и наоборот
  • 5. Функция str.title(). Вернуть строку с заглавными буквами в словах
  • 6. Функция str.upper(). Конвертировать символы строки в верхний регистр
  • Связанные темы

Поиск на других ресурсах:

1. Функция str.capitalize(). Первый символ строки становится прописным

Функция capitalize() возвращает копию строки с первым символом в верхнем регистре, а другие символы в нижнем регистре.

Пример.

# Функция str.capitalize()
# Ко вниманию принимаются только буквы
s1 = 'abcdef ghi'
s2 = str.capitalize(s1) # s2 = 'Abcdef ghi'

s1 = 't'
s2 = str.capitalize(s1) # s2 = 'T'

s1 = '234'
s2 = str.capitalize(s1) # s2 = '234'

s1 = 'ABCDEF GHI'
s2 = str.capitalize(s1) # s2 = 'Abcdef ghi'

# Учет кирилличной азбуки
s1 = 'байт!'
s2 = str.capitalize(s1) # s2 = 'xc1xe0xe9xf2!'

 

2. Функция str.casefold(). Вернуть свернутую копию строки

Функция str.casefold() возвращает свернутую копию строки. Понятие «свернутая копия» строки означает, что в такой копии удалены все отличия регистра символов в строке.
Особенность «свернутой» копии строки состоит в том, что функция lower() не может быть применена к некоторым символам, а функция casefold() может. Примером такого символа есть немецкий символ ‘ß’, который в функции casefold() заменяется на символы ss в отличие от функции lower().

Функция введена в Python начиная из версии 3.3.

Пример.

# Функция casefold() - возвращает свернутую копию строки

# Использование со строками, содержащими символы верхнего и нижнего регистров
s1 = 'Abcdef Ghi'
s2 = str.casefold(s1) # s2 = 'abcdef ghi'
s3 = s1.casefold() # s3 = 'abcdef ghi'

# использование со строками, содержащими символы верхнего регистра
s4 = 'ABCDEF SS'
s5 = s4.casefold() # s5 = 'abcdef ss'

 

3. Функция str.lower(). Преобразование регистра символов

Функция str.lower() преобразовывает символы в нижний регистр.

Пример.

# Функция str.lower()

s1 = 'ABCD'
s2 = s1.lower() # s2 = 'abcd'

s2 = 'Hello World!'.lower() # s2 = 'hello world!'


 

4. Функция str.swapcase(). Вернуть копию строки с преобразованием строчных символов в заглавные и наоборот

Функция str.swapcase() возвращает копию строки с заглавными буквами, преобразованными в строчные и, наоборот, строчными преобразованными в заглавные. Общая форма вызова функции следующая:

s2 = s1.swapcase()

где

  • s1 – исходная строка, которую нужно преобразовать;
  • s2 – результирующая строка в которой все заглавные символы преобразованы в строчные, а все строчные преобразованы в заглавные.

Для данной функции нельзя утверждать, что нижеследующее выражение

s.swapcase().swapcase() == s

будет всегда выполняться.

Пример.

# Функция str.swapcase()

s1 = 'Abcd'
s2 = s1.swapcase() # s2 = 'aBCD'

s1 = 'a+5+BC+D'
s2 = str.swapcase(s1) # s2 = 'A+5+bc+d'

s2 = 'hELLO WORLD'.swapcase() # s2 = 'Hello world'

# Для кириллицы
s1 = 'вЕБ-САЙТ'
s2 = s1.swapcase() # s2 = 'Веб-сайт'

 

5. Функция str.title(). Вернуть строку с заглавными буквами в словах

Функция str.title() возвращает строку, в которой все слова начинаются с заглавной буквы. Другие символы в этих словах есть строчные. Общая форма использования функции следующая:

s2 = s1.title()

где

  • s1 – исходная строка;
  • s2 – результирующая строка, в которой реализуется корректировка символов, которые есть началами слов.

Функция имеет одну особенность. Символ ‘» апострофа образовывает границу слова. В некоторых случаях это нежелательно. Во избежание этого недостатка нужно использовать регулярные выражения.

Пример.

# Функция str.title

s1 = 'hello world!' # s2 = 'Hello World!'
s2 = s1.title()

s1 = 'HELLO WORLD!'
s2 = str.title(s1) # s2 = 'Hello World!'

# Отдельный случай с символом апострофа '''
s1 = "I'm happy!"
s2 = s1.swapcase() # s2 = 'i'M HAPPY!'

 

6. Функция str.upper(). Конвертировать символы строки в верхний регистр

Функция str.upper() позволяет получить копию строки в которой все символы находятся в верхнем регистре. Согласно документации Python общая форма функции следующая:

s2 = s1.upper()

где

  • s1 – исходная строка;
  • s2 – результирующая строка-копия, в которой символы нижнего регистра строки s1 заменены на символы верхнего регистра.

Конвертирование символов осуществляется только для символов имеющих верхний регистр. Это символы, которые включены в следующие категории:

  • «Lu» – Letter uppercase;
  • «Ll» – Letter lowercase;
  • «Lt» – Letter titlecase.

Пример.

# Функция str.upper()

s1 = 'abcdef'
s2 = s1.upper() # s2 = 'ABCDEF'

s1 = '' # пустая строка
s2 = str.upper(s1) # s2 = ''

s1 = '5+6=11'
s2 = s1.upper() # s2 = '5+6=11'

s2 = 'aBc deFg'.upper() # s2 = 'ABC DEFG'

 


Связанные темы

  • Функции для работы со строками, определяющие особенности строки
  • Функции поиска и замены подстроки в строке
  • Функции обрабатывающие и определяющие начало и конец строки
  • Функции обработки строки в соответствии с форматом или правилом кодирования. Стили форматирования
  • Функции выравнивания строк

 


Программирование: теория и практика

В одной из прошлых статей я разбирал строки в JavaScript. Теперь пришло время поговорить о строках в языке программирования Python. 

Начнем с теории. Строка – это последовательность символов произвольной длины. Также строки являются объектами класса str, и если мы захотим получить не строку, а число, то можем использовать функцию приведения.

Склеивание и разделение строк

Самый простой способ склеить строки в Python – это сложить их с помощью знака «+». Рассмотрим на примере:

str = "a"+"b"
print(str) # Выведет "ab"

Но такой способ не всегда будет нам подходить. Рассмотрим метод join():

str = ["a", "b", "c"]
print("".join(str)) # Выведет "abc"

Перед .join() мы указываем разделитель строк, а в скобках сам их массив.

Для того чтобы разделить строки, используем обратный метод – split(). Тут в скобках указываем набор символов, по которым будет идти разделение, а перед методом не забываем указать имя строки, а после нее поставить точку. Рассмотрим на примере:

str = "a,b,c"
print(str.split(",")) # Выведет ['a', 'b', 'c']

Существует и другой способ разделения строк, он называется срез. Срез str[x:y] позволит нам получить строку от символа x до y. При этом необязательно указывать оба параметра, ведь в таком случае срез произойдет от начала или до самого конца строки. 

Определенный промежуток:

str = "Строки в Python и методы работы с ними"
print(str[9:15]) # Выведет "Python"

С начала строки:

str = "Строки в Python и методы работы с ними"
print(str[:15]) # Выведет "Строки в Python"

До самого конца:

str = "Строки в Python и методы работы с ними"
print(str[18:]) # Выведет "методы работы с ними"

Также можно срезать каждый энный символ при помощи двойного двоеточия:

str = "123456789"
print(str[::2]) # Выведет "13579"

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Форматирование строк в Python

Для подстановки в строку любой переменной, которая может являться результатом работы основной части кода, нам понадобятся f-строки. Они появились в Python 3.6, поэтому я рекомендую использовать только свежие версии этого языка программирования. Рассмотрим на примере работу с f-строками:

num = 2*10
num2 = 100
str = f"Первое число: {num}. Второе число: {num2}"
print(str) # Выведет "Первое число: 20. Второе число: 100"

Поиск в строках

Если нам нужно найти набор символов в начале или в конце данной строки, то на помощь приходят два быстрых метода.

Первый метод – startswith(). Он позволяет искать набор символов в начале строки. Рассмотрим на примере:

str =  "Строки в Python и методы работы с ними"
print(str.startswith("Строки")) #Выведет True

Второй метод – endswith(). Он позволяет искать набор символов в конце строки. Рассмотрим на примере:

str =  "...я разбирал строки в JavaScript"
print(str.endswith("JavaScript")) #Выведет True

А если нам нужно найти набор символов в произвольном месте строки, то используем метод find(). Рассмотрим на примере:

str = "Строки в Python и методы работы с ними"
print(str.find("Python")) #Выведет 9

В данном случае скрипт нашел набор символов в строке и вывел индекс начала его вхождения в ней.

str = "Строки в Python и методы работы с ними"
print(str.find("JavaScript")) #Выведет -1

А в этом случае скрипт не нашел набор символов в строке и вывел «-1».

Замена в строках

Для замены одного набора символов на другой в строке используют метод replace(). Рассмотрим данный метод на примере:

str = "Строки в Python и методы работы с ними"
print(str.replace("Python", "JavaScript")) #Выведет "JavaScript"

Вывод каждого символа в строке

Если нам нужно получить и обработать каждый символ в строке отдельно, то мы можем использовать цикл for. Рассмотрим на примере:

str = "123"
for i in str:
print(i) #Выведет "1" "2" "3"

Узнаем длину строки

Для того чтобы получить длину строки, используем метод len():

str = "123"
print(len(str)) # Выведет 3

Преобразование строки в число

Если мы имеем строку, состоящую из набора цифр, то мы смело можем преобразовать ее в число, используя функцию приведения int(). Рассмотрим на примере:

str = "123"
print(int(str)) # Выведет 123

Изменение регистра строк в Python

Для того чтобы все буквы в строке были заглавными, используем метод upper():

str = "Строки в Python и методы работы с ними"
print(str.upper()) # Выведет "СТРОКИ В PYTHON И МЕТОДЫ РАБОТЫ С НИМИ"

И метод lower() для строчных букв:

str = "СТРОКИ В PYTHON И МЕТОДЫ РАБОТЫ С НИМИ"
print(str.upper()) # Выведет "строки в python и методы работы с ними"

Чтобы первая буква в строке стала заглавной, следует использовать метод capitalize():

str = "строки в python и методы работы с ними"
print(str.capitalize()) # Выведет "Строки в python и методы работы с ними"

Удаление лишних пробелов из строк

Метод strip() удаляет пробельные символы в начале и в конце строки. lstrip() и rstrip() делают то же самое, но в определенных местах: первый метод в начале строки, а второй – в ее конце.

Итог

Мы разобрали основные методы работы со строками в Python. Предлагайте идеи для статей и удачи в ваших начинаниях!

Одним из самых распространённых типов данных является строковый. Вопреки расхожему мнению, программист чаще сталкивается не с числами, а с текстом. В Python, как известно, всё является объектами. Не исключение и строки – это объекты, состоящие из набора символов. Естественно, в языке существует широкий набор инструментов для работы с этим типом данных.

Содержание

  1. Строковые операторы
  2. Оператор сложения строк +
  3. Оператор умножения строк *
  4. Оператор принадлежности подстроки in
  5. Встроенные функции строк в python
  6. Индексация строк
  7. Форматирование строки
  8. Изменение строк
  9. Встроенные методы строк в Python
  10. Изменение регистра строки
  11. Найти и заменить подстроку в строке
  12. Классификация строк
  13. Выравнивание строк, отступы
  14. Методы преобразования строки в список

Строковые операторы

Операторы «+» и «*» в Питоне применимы не только к числам, но и к строкам.

Оператор сложения строк +

Оператор «+» выполняет операцию, называемую конкатенацией, — объединение строк.

Пример:


var_1 = 'Привет,'
var_2 = 'Python!'
print(var_1 + ' ' + var_2)
# Вывод:

Привет, Python!

Можно и так:


var_1 = 'Привет, '
var_2 = 'Python!'
var_1 += var_2
print(var_1)
# Вывод:

Привет, Python!

Оператор умножения строк *

Оператор «*» дублирует строку указанное количество раз.

Пример:


var_1 = 'O_o '
var_2 = 10
print(var_1 * var_2)
# Вывод:

O_o O_o O_o O_o O_o O_o O_o O_o O_o O_o

Это работает только с целочисленными множителями. Если умножить на ноль или отрицательное число, результатом будет пустая строка. Но лучше так не делать.


var_1 = 'O_o'
[print('При множителе', i, 'получаем строку: "' + var_1 * i + '"') for i in range(-1, 2)]
# Вывод:

При множителе -1 получаем строку: ""

При множителе 0 получаем строку: ""

При множителе 1 получаем строку: "O_o"

Оператор принадлежности подстроки in

Если надо проверить, содержится ли подстрока в строке, удобно пользоваться оператором “in”


var_1 = '''Lorem ipsum dolor sit amet, consectetur adipisicing elit. Id,
fuga, earum consequuntur magni accusamus nihil ipsum qui. Facere,
error velit possimus qui dolorum dolorem illum voluptates nemo pariatur ea. Temporibus.
'''
print('ipsum' in var_1)
# Вывод:

True

Так же можно использовать этот оператор с «not» для инвертирования результата.


var_1 = '''Lorem ipsum dolor sit amet, consectetur adipisicing elit. Id,
fuga, earum consequuntur magni accusamus nihil ipsum qui. Facere,
error velit possimus qui dolorum dolorem illum voluptates nemo pariatur ea. Temporibus.
'''
print('тру-ля-ля' not in var_1)
# Вывод:

True

Встроенные функции строк в python

Пайтон содержит ряд удобных встроенных функций для работы со строками.

Функция ord() возвращает числовое значение символа, при чём, как для кодировки ASCII, так и для UNICODE.


print('A', ord('A'))
print('А русская', ord('А'))
print('~', ord('~'))
print('1', ord('1'))  # Обратите внимание, что здесь единица является именно строкой
# Вывод:

A 65

А русская 1040

~ 126

1 49

Функция chr(n) возвращает символьное значение для данного целого числа, то есть выполняет действие обратное ord().


from random import randint

for i in range(10):
[print(chr(randint(0, 8000)), end=' ') for i in range(10)]
print('')
# Вывод:

૸ ச ઘ ᔝ ዱ છ ᐝ § ඗ ֹ

ၹ ሌ ᔭ ཋ ٺ ຝ ྅ ᒊ ֚ ᴠ

д ߀ Ỽ Ů ጼ ̼ ᅌ ᶥ ḿ ᇶ

ᴗ ȹ ཱི ๤ ൉ ᥈ Ҥ Р ᇑ ਴

ސ ਋ ϯ ኊ ᠻ ដ ࡯ ᄖ ᓣ ᆧ

ଯ ᑟ ߂ ޸ ൢ ԝ ᤵ ඡ ᴼ ႊ

ᥒ ᜭ ˽ ä ؑ ૧ ᅈ ഉ ौ ଦ

ᔚ ॓ ௵ ᥰ ɵ ຘ Ἵ ৓ ᨃ ང

ᬇ ᳓ ᕈ ᳖ ૓ ࣝ ˼ ʋ ં გ

? ᓀ ځ ื ᚢ Ӌ ဃ ᡹ ؅ ႔

Функция len() возвращает количество символов в строке.


from random import randint

for i in range(10):
var = [chr(randint(500, 800)) for i in range(randint(10, 20))]
print(len(''.join(var)), ''.join(var))
# Вывод:

11 ˫ʸɹʄˈȺȨȪȍʮ˴

16 ȷ˝ȁɚ˷Ⱥʾ̂ʨʗȍɺɹ˫̓ȼ

13 əʼɒȞʪɗʍ̍ˡɮɫȉʙ

10 ʜ˧ˬɆ˃əȃ̚ʰ̏

12 ˤ˾ʀɨȷˌɏʿɴȨ˲ȟ

13 ˌʡ˝ȭʪɈ˾ʵȋɎʋ˿ʍ

13 ˜̃ȱ̇ˋ˂ʡȞȍ̄ʭȌʣ

14 ̙ɸɎˈ̀ȾȠ˞ȒɇʀɈȁȫ

20 ȞȎʯɐʪəʔȆʳȨɦʚ˾Ǵȁɕˋ˘̈˭

12 ʷɱ̄˺ʽʤɳȂȗʍˉɦ

 Функция str() возвращает строковое представление объекта.


from math import inf, e, pi

print(str(...))
print(str(inf))
print(str(e))
print(str(pi))
print(str(10 + 11))
print(str(10 + 11j))
print(str(None))
print(str(1 == 1))
# Вывод:

Ellipsis

inf

2.718281828459045

3.141592653589793

21

(10+11j)

None

True

Индексация строк

Строка является упорядоченной последовательностью символов. Другими словами, она состоит из символов, стоящих в определённом порядке. Благодаря этому, к символу можно обратиться по его порядковому номеру. Для этого надо указать номер символа в квадратных скобках. Нумерация начинается с нуля (0 – это первый символ).


var = '''Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Consequuntur, eligendi, aperiam, consequatur, perferendis
non sequi voluptates asperiores soluta quam ad id beatae
facere aut quod libero dignissimos inventore nesciunt commodi.'''
print(var[0])
print(var[10])
print(var[33])
# Вывод:

L

m

c

Попытка обращения по индексу большему чем длина строки вызовет исключение IndexError:


var = '''Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Consequuntur, eligendi, aperiam, consequatur, perferendis
non sequi voluptates asperiores soluta quam ad id beatae
facere aut quod libero dignissimos inventore nesciunt commodi.'''
print(var[330])
# Вывод:

Traceback (most recent call last):

File "C:UsersivandAppDataRoamingJetBrainsPyCharm2021.2scratchesscratch.py", line 7, in <module>

print(var[330])

IndexError: string index out of range

 

Process finished with exit code 1

В качестве индекса может быть использовано отрицательное число. В этом случае индексирование начинается с конца строки: -1 относится к последнему символу, -2 к предпоследнему и так далее.


var = '''Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Consequuntur, eligendi, aperiam, consequatur, perferendis
non sequi voluptates asperiores soluta quam ad id beatae
facere aut quod libero dignissimos inventore nesciunt commodi.'''
print(var[-1])
print(var[-10])
print(var[-33])
# Вывод:

.

t

s

Срезы строк

В Python существует механизм срезов коллекций. Срезы позволяют обратиться к подстроке используя индексы. Для этого надо в квадратных скобках указать: [начальный индекс : конечный индекс : шаг]. Каждый из параметров является необязательным. Поскольку строка это коллекция, срезы применимы и к ней.


var = '''Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Consequuntur, eligendi, aperiam, consequatur, perferendis
non sequi voluptates asperiores soluta quam ad id beatae
facere aut quod libero dignissimos inventore nesciunt commodi.'''
print(var[-1: 50: -3])
print(var[10:-160])
print(var[::-33])
# Вывод:

.ootieetv msg elo ara   ea   ual rrssauvuso   snee,tqn ae dgernqn    i

m dolor sit amet, consectetur adipisicing elit.

Consequuntur, eligendi, aperiam, co

.s r a n

Форматирование строки

В Python есть функция форматирования строки, которая официально названа литералом отформатированной строки, но обычно упоминается как f-string.

Главной особенностью этой функции является возможность подстановки значения переменной в строку.

Чтобы это сделать с помощью f-строки необходимо:

  • Указать f или F перед кавычками строки (что сообщит интерпретатору, что это f-строка).
  • В любом месте внутри строки вставить имя переменной в фигурных скобках ({ }).

var = 10 * 254 // 77 % 5 ** 5
var_2 = f'Вот что получилось {var}'
print(var_2)
# Вывод:

Вот что получилось 32

Изменение строк

Тип данных строка в Python относится к неизменяемым (immutable), но это почти не влияет на удобство их использования, ведь можно создать изменённую копию. Для этого есть два возможных пути:

  • Использовать перезапись значения переменной

var = 'Что-то '
var += 'и что-то ещё'
print(var)
var = var[:16] + 'новое'
print(var)
# Вывод:

Что-то и что-то ещё

Что-то и что-то новое

  • Использовать встроенный метод replace(x, y):

var = 'Что-то '
print(var.replace('то ', 'нибудь'))
print(var)
# Вывод:

Что-нибудь

Что-то

Как Вы можете видеть, данный метод не меняет строку, а возвращает изменённую копию.

Встроенные методы строк в Python

Поскольку строка в Пайтон – это объект, у него есть свои методы. Методы – это те же самые функции, просто они «закреплены» за объектами определённого класса.

Изменение регистра строки

Если Вам надо изменить регистр строки, удобно использовать один из следующих методов

capitalize() переводит первую букву строки в верхний регистр, остальные в нижний.


var = 'abracadabra'
print(var.capitalize())
print(var)
# Вывод:

Abracadabra

abracadabra

Не алфавитные символы не изменяются:


var = '_abracadabra'
print(var.capitalize())
print(var)
# Вывод:

_abracadabra

_abracadabra

lower() преобразует все буквенные символы в строчные.


var = 'AbRaCAdAbRa'
print(var.lower())
print(var)
# Вывод:

abracadabra

AbRaCAdAbRa

swapcase() меняет регистр на противоположный.


var = 'AbRaCAdAbRa'
print(var.swapcase())
print(var)
# Вывод:

aBrAcaDaBrA

AbRaCAdAbRa

title() преобразует первые буквы всех слов в заглавные


var = 'я пРосТо ПРИМЕР'
print(var.title())
var = 'я @странный _ПРИМЕР'
print(var.title())
print(var)
# Вывод:

Я Просто Пример

Я @Странный _Пример

я @странный _ПРИМЕР

upper() преобразует все буквенные символы в заглавные.


var = 'я пРосТо ПРИМЕР'
print(var.upper())
var = 'я @странный _ПРИМЕР'
print(var.upper())
print(var)
# Вывод:

Я ПРОСТО ПРИМЕР

Я @СТРАННЫЙ _ПРИМЕР

я @странный _ПРИМЕР

Найти и заменить подстроку в строке

Эти методы предоставляют различные способы поиска в целевой строке указанной подстроки.

Каждый метод в этой группе поддерживает необязательные аргументы start и end. Они задают диапазон поиска: действие метода ограничено частью целевой строки, начинающейся в позиции символа start и продолжающейся вплоть до позиции символа end, но не включая его. Если start указано, а end нет, метод применяется к части строки от start до конца.

count() подсчитывает количество точных вхождений подстроки в строку.


var = 'Ололо'
print(var.count('ол'))
# Вывод:

1

endswith() определяет, заканчивается ли строка заданной подстрокой.


var = 'Олололололо'
print(var.endswith('оло'))
print(var.endswith('ол', 5, 10))
# Вывод:

True

True

find() ищет в строке заданную подстроку. Возвращает первый индекс который соответствует началу подстроки. Если указанная подстрока не найдена, возвращает -1.


var = 'Олололололо'
print(var.find('оло'))
print(var.find('лОл'))
# Вывод:

2

-1

index() ищет в строке заданную подстроку.

Этот метод идентичен find(), за исключением того, что он вызывает исключение ValueError, если подстрока не найдена.


var = 'Олололололо'
print(var.index('лОл'))
# Вывод:

Traceback (most recent call last):

File "C:UsersivandAppDataRoamingJetBrainsPyCharm2021.2scratchesscratch.py", line 3, in <module>

print(var.index('лОл'))

ValueError: substring not found

 

Process finished with exit code 1

rfind() ищет в строке заданную подстроку, начиная с конца.

Возвращает индекс последнего вхождения подстроки, который соответствует её началу.


var = 'Олололололо'
print(var.rfind('оло'))
# Вывод:

8

rindex() ищет в строке заданную подстроку, начиная с конца.

Этот метод идентичен rfind(), за исключением того, что он вызывает исключение ValueError, если подстрока не найдена.

startswith() определяет, начинается ли строка с заданной подстроки.


var = 'Олололололо'
print(var.startswith('Оло'))
# Вывод:

True

Классификация строк

Методы в этой группе классифицируют строку на основе символов, которые она содержит.

isalnum() возвращает True, если строка не пустая, а все ее символы буквенно-цифровые (либо буква, либо цифра).


var = 'Олололололо'
print(var.isalnum())
# Вывод:

True

isalpha() определяет, состоит ли строка только из букв.

isdigit() определяет, состоит ли строка из цифр.

isidentifier() определяет, является ли строка допустимым идентификатором (название переменной, функции, класса и т.д.) Python.


var = 'print'
print(var.isidentifier())
# Вывод:

True

isidentifier() вернет True для строки, которая соответствует зарезервированному ключевому слову Пайтон, даже если его нельзя использовать.

Вы можете проверить, является ли строка ключевым словом Python, используя функцию iskeyword(), которая находится в модуле keyword.

Если вы действительно хотите убедиться, что строку можно использовать как идентификатор Питон, вы должны проверить, что isidentifier() = True и iskeyword() = False.

islower() определяет, являются ли буквенные символы строки строчными.

isprintable() определяет, состоит ли строка только из печатаемых символов.


print('qwerty'.isidentifier())
print(chr(7).isidentifier())
# Вывод:

True

False

Это единственный метод данной группы, который возвращает True, если строка не содержит символов. Все остальные возвращаются False.

isspace() определяет, состоит ли строка только из пробельных символов.

Тем не менее есть несколько символов ASCII, которые считаются пробелами. И если учитывать символы Юникода, их еще больше:

‘f’ и ‘r’ являются escape-последовательностями для символов ASCII; ‘u2005’ это escape-последовательность для Unicode.

istitle() определяет, начинаются ли слова строки с заглавной буквы.

isupper() определяет, являются ли буквенные символы строки заглавными.

Выравнивание строк, отступы

Методы из данной группы управляют отображением строки.

center() выравнивает строку по центру.


print('qwerty'.center(50))
print((' ' * 22 + 'qwerty' + ' ' * 22))
print((' ' * (25 - int(len('qwerty') / 2)) + 'qwerty' + ' ' * (25 - int(len('qwerty') / 2)) == ('qwerty'.center(50))))
# Вывод:

                       qwerty                      
                       qwerty                      
True

Если указан необязательный аргумент fill, он используется как символ заполнения:


print('qwerty'.center(50, '='))
# Вывод:

======================qwerty======================

Если строка больше или равна указанной ширине, строка возвращается без изменений:


print('qwerty'.center(6, '='))
# Вывод:

qwerty

expandtabs()  заменяет каждый символ табуляции (‘t’) пробелами. По умолчанию табуляция заменяются на 8 пробелов.

tabsize необязательный параметр, задающий количество пробелов.

ljust() выравнивание по левому краю.

lstrip() удаляет переданные в качестве аргумента символы слева. По умолчанию это пробелы.


print('__init__.py'.lstrip('_'))
# Вывод:

init__.py

replace() заменяет вхождения подстроки в строке.


var = 'Hello, C! Hello, JS! Hello, Python!'
print(var.replace('C', 'PHP'))
# Вывод:

Hello, PHP! Hello, JS! Hello, Python!

Необязательный аргумент count, указывает количество замен, которое нужно осуществить:


var = 'Hello, C! Hello, JS! Hello, Python!'
print(var.replace('Hello', 'Bye', 2))
# Вывод:

Bye, C! Bye, JS! Hello, Python!

rjust() выравнивание по правому краю строки в поле.

rstrip() обрезает пробельные символы.

strip() удаляет символы с левого и правого края строки.

Когда возвращаемое значение метода является другой строкой, как это часто бывает, методы можно вызывать последовательно:


var = 'Hello, C! Hello, JS! Hello, Python!'
print(var.replace('Hello', 'Buy', 2).center(60).swapcase())
# Вывод:

              bUY, c! bUY, js! hELLO, pYTHON!               

zfill()  возвращает копию строки дополненную нулями слева для достижения длины строки указанной в параметре width:


var = 12/100*(-0.5)

print(str(var).zfill(7))
# Вывод:

-000.06

Если строка короче или равна параметру width, строка возвращается без изменений:


var = 10/3
print(str(var).zfill(7))
# Вывод:

3.3333333333333335

Методы преобразования строки в список

Методы в данной группе превращают строку в другой тип данных и наоборот. Эти методы возвращают или принимают коллекции (чаще всего это список).

join() возвращает строку, которая является результатом конкатенации элементов коллекции и разделителя.


var: list[str] = ['1', '2', '3']
print('+'.join(var))
var: tuple[str, str, str] = ('1', '2', '3')
print(' & '.join(var))
var: set[str, str, str] = {'1', '2', '3'}
print(' и '.join(var))
var: dict[str, int] = {'1': 4, '2': 5, '3': 6}
print('->'.join(var))
# Вывод:

1+2+3

1 & 2 & 3

3 и 2 и 1

1->2->3

Стоит обратить внимание что все элементы итерируемого объекта должны быть строкового типа. Так же Вы могли заметить в последнем примере, что для объединения словаря в строку метод join() использует не значения, а ключи. Если Вам нужны именно ключи, то делается это так:


var: dict[str, str] = {'1': '4', '2': '5', '3': '6'}
print('->'.join(var.values()))
# Вывод:

4->5->6

Сложнее ситуация, когда нужны пары ключ-значение. Здесь придётся сперва распаковать кортежи.


var: dict[str, str] = {'1': '4', '2': '5', '3': '6'}
print('->'.join([str(a+':'+b) for a, b in var.items()]))
# Вывод:

1:4->2:5->3:6

partition() делит строку на основе разделителя (действие, обратное join). Возвращаемое значение представляет собой кортеж из трех частей:

  • Часть строки до разделителя
  • Разделитель
  • Часть строки после разделителя

print('1:4->2:5->3:6'.partition(':'))
# Вывод:

('1', ':', '4->2:5->3:6')

Если разделитель не найден, возвращаемый кортеж содержит строку и ещё две пустые строки:


print('1:4->2:5->3:6'.partition('7'))
# Вывод:

('1:4->2:5->3:6', '', '')

rpartition() делит строку на основе разделителя, начиная с конца.

rsplit() делит строку на список из подстрок. По умолчанию разделителем является пробел.


print('1:4->2:5->3:6'.rsplit('->'))
# Вывод:

['1:4', '2:5', '3:6']

split() делит строку на список из подстрок.

Ведет себя как rsplit(), за исключением того, что при указании maxsplit – максимального количества разбиений, деление начинается с левого края строки:


print('1:4->2:5->3:6'.rsplit('->', 1))
print('1:4->2:5->3:6'.split('->', 1))
# Вывод:

['1:4->2:5', '3:6']

['1:4', '2:5->3:6']

Если параметр maxsplit не указан, между rsplit() и split() разницы нет.

splitlines() делит текст на список строк и возвращает их в списке. Любой из следующих символов или последовательностей символов считается границей строки:

Разделитель Значение
n Новая строка
r Возврат каретки
rn Возврат каретки + перевод строки
v или же x0b Таблицы строк
f или же x0c Подача формы
x1c Разделитель файлов
x1d Разделитель групп
x1e Разделитель записей
x85 Следующая строка
u2028 Новая строка (Unicode)
u2029 Новый абзац (Unicode)

Заключение

В этом уроке мы рассмотрели основные инструменты для работы со строками в Python. Как видите, они удобны и гибки. Есть встроенные функции и методы объекта «строка», строковые литералы. Ещё больше возможностей даёт нерассмотренный в этом уроке метод format и модуль re. Так же отдельного разговора заслуживает работа с кодировками. Следует отметить для тех, кто уже знаком с другими языками программирования: в отличие от некоторых из них, один символ в Пайтоне тоже является строкой. И изюминка напоследок. Поскольку в Питоне всё является объектом, у каждой строки тоже есть атрибуты.


from pprint import pprint

pprint('Строка'.__dir__())
# Вывод:

['__repr__',

'__hash__',

'__str__',

'__getattribute__',

'__lt__',

'__le__',

'__eq__',

'__ne__',

'__gt__',

'__ge__',

'__iter__',

'__mod__',

'__rmod__',

'__len__',

'__getitem__',

'__add__',

'__mul__',

'__rmul__',

'__contains__',

'__new__',

'encode',

'replace',

'split',

'rsplit',

'join',

'capitalize',

'casefold',

'title',

'center',

'count',

'expandtabs',

'find',

'partition',

'index',

'ljust',

'lower',

'lstrip',

'rfind',

'rindex',

'rjust',

'rstrip',

'rpartition',

'splitlines',

'strip',

'swapcase',

'translate',

'upper',

'startswith',

'endswith',

'removeprefix',

'removesuffix',

'isascii',

'islower',

'isupper',

'istitle',

'isspace',

'isdecimal',

'isdigit',

'isnumeric',

'isalpha',

'isalnum',

'isidentifier',

'isprintable',

'zfill',

'format',

'format_map',

'__format__',

'maketrans',

'__sizeof__',

'__getnewargs__',

'__doc__',

'__setattr__',

'__delattr__',

'__init__',

'__reduce_ex__',

'__reduce__',

'__subclasshook__',

'__init_subclass__',

'__dir__',

'__class__']

Строки в Python

str.capitalize()

Возвращает копию строки, переводя первую буквы в верхний регистр, а остальные в нижний.

'нАЧАТЬ С ЗАГЛАВНОЙ '.capitalize()  # Начать с заглавной

str.casefold()

Возвращает копию строки в сложенном регистре.

Преобразование в сложенный регистр похоже на преобразование к нижнему регистру, однако более агрессивно. Например: буква «ß» в нижнем регистре в немецком языке соответствует сочетанию «ss», однако, ввиду того, что символ «ß» уже имеет нижний регистр, метод .lower() ни к чему не приведёт, в то время как casefold() приведёт символ к «ss».

'ß'.lower()  # 'ß'
'ß'.casefold()  # 'ss'

'groß'.casefold() == 'gross'  # True

str.center(width[, fillchar])

Позиционирует по центру указанную строку, дополняя её справа и слева до указанной длины указанным символом.

width : Желаемая минимальная длина результирующей строки.

fillchar : Символ, которым следует расширять строку. По умолчанию — пробел.

Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.

''.center(3, 'w')  # www
'1'.center(2, 'w')  # 1w
'1'.center(4, 'w')  # w1ww
'1'.center(0, 'w')  # 1
'1'.center(4)  # ' 1  '

Символ добавляется к строке циклично сначала справа, затем слева.

Чтобы позиционировать строку вправо используйте str.rjust().
Чтобы позиционировать строку влево используйте str.ljust().

str.count(sub[, start[, end]])

Для строки возвращает количество непересекающихся вхождений в неё указанной подстроки.

sub : Подстрока, количество вхождений которой следует вычислить.

start=0 : Позиция в строке, с которой следует начать вычислять количество вхождений подстроки.

end=None : Позиция в строке, на которой следует завершить вычислять количество вхождений подстроки.

my_str = 'подстрока из строк'
my_str.count('строка')  # 1
my_str.count('стр')  # 2
my_str.count('стр', 0, -1)  # 2
my_str.count('стр', 8)  # 1
my_str.count('стр', 1, 5)  # 0
my_str.count('стр', 1, 6)  # 1

Позиции начала и конца трактуются также как в срезах.

str.encode(encoding=»utf-8», errors=»strict»)

Кодирует строку в байты/байтстроку, используя зарегистрированный кодек.

encoding : Название кодировки. По умолчанию — системная кодировка, доступная из sys.getdefaultencoding().

errors=strict : Наименование схемы обработки ошибок. По умолчанию — strict.

Имена доступных кодировок лучше всего узнавать из документации к модулю codecs.

from sys import getdefaultencoding
getdefaultencoding()  # utf-8
my_string = 'кот cat'
type(my_string)  # str

my_string.encode()
# b'xd0xbaxd0xbexd1x82 cat'

my_string.encode('ascii')
# UnicodeDecodeError

my_string.encode('ascii', errors='ignore')
# b' cat'

my_string.encode('ascii', errors='replace')  
# b'??? cat'

my_string.encode('ascii', errors='xmlcharrefreplace')
# b'кот cat'

my_string.encode('ascii', errors='backslashreplace')
# b'\u043a\u043e\u0442 cat'

my_string.encode('ascii', errors='namereplace')
# b'\N{CYRILLIC SMALL LETTER KA}\N{CYRILLIC SMALL LETTER O}\N{CYRILLIC SMALL LETTER TE} cat'

surrogated = 'udcd0udcbaudcd0udcbeudcd1udc82 cat'

surrogated.encode()  
# UnicodeEncodeError

surrogated.encode(errors='surrogateescape')
# b'xd0xbaxd0xbexd1x82 cat'

surrogated.encode(errors='surrogatepass')
# b'xedxb3x90xedxb2xbaxedxb3x90xedxb2xbexedxb3x91xedxb2x82 cat'

Зарегистрировать новую схему можно при помощи codecs.register_error().

str.endswith(suffix[, start[, end]])

Возвращает флаг, указывающий на то, заканчивается ли строка указанным постфиксом.

suffix : Строка-постфикс, в наличии которой требуется удостовериться.

start : Позиция (индекс символа), с которой следует начать поиск. Поддерживает отрицательные значения.

end : Позиция (индекс символа), на которой следует завершить поиск. Поддерживает отрицательные значения.

my_str = 'Discworld'
my_str.endswith('jockey')  # False
my_str.endswith('world')  # True
my_str.endswith('jockey', 2)  # False
my_str.endswith('Disc', 0, 4)  # True

str.expandtabs(tabsize=8)

Возвращает копию строки, в которой символы табуляций заменены пробелами.

tabsize=8 : Максимальное количество пробелов на которое может быть заменена табуляция.

В возвращаемой копии строки все табуляции заменяются одним или несколькими пробелами, в зависимости от текущего номера столбца и указанного максимального размера табуляции.

my_str = 't1t10t100t1000t10000'

my_str.expandtabs()
# '        1       10      100     1000    10000'

my_str.expandtabs(4)
# '    1   10  100 1000    10000'

Для замены табуляций изначально номер столбца задаётся равным нулю и начинается посимвольный проход по строке.

Если очередной символ является табуляцией (t), то на его место вставляется столько пробелов, сколько требуется для того, что текущий номер столбца стал равным позиции следующей табуляции. При этом сам символ табуляции не копируется.

Если очередной символ является переносом строки (n) или возвратом каретки (r), он копируется, а текущий номер столбца задаётся равным нулю.

Другие символы копируются в неизменном виде, а текущий номер столбца увеличивается на единицу (вне зависимости от того, как символ будет представлен при выводе).

str.find(sub[, start[, end]])

Возвращает наименьший индекс, по которому обнаруживается начало указанной подстроки в исходной.

sub : Подстрока, начальный индекс размещения которой требуется определить.

start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.

end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.

Если подстрока не найдена, возвращает −1.

my_str = 'barbarian'
my_str.find('bar')  # 0
my_str.find('bar', 1)  # 3
my_str.find('bar', 1, 2)  # -1

Необязательные параметры start и end могут принимать любые значения, поддерживаемые механизмом срезов, а значит и отрицательные.

Метод должен использоваться только в случае необходимости найти индекс начала подстроки. Для обычного определения вхождения подстроки используйте оператор in:

my_str = 'barbarian'
'bar' in my_str  # True

str.format(args, *kwargs)

Возвращает копию строки, отформатированную указанным образом.

args : Позиционные аргументы.
kwargs : Именованные аргументы.

Строка, для которой вызывается данный метод может содержать как обычный текст, так и маркеры в фигурных скобках {}, которые следует заменить. Обычный текст, вне скобок будет выведен как есть без именений.

Метод возвращает копию строки, в которой маркеры заменены текстовыми значениями из соответствующих аргументов.

Наименование состоит из имени аргумента (либо его индекса). Числовой индекс при этом указывает на позиционный аргумент; имя указывает на именованный аргумент.

Если используются числа, и они составляют последовательность (0, 1, 2…), то они могут быть опущены разом (но не выборочно). Например, {}-{}-{} и {0}-{1}-{2} эквивалентны.

'{}-{}-{}'.format(1, 2, 3)  # Результат: '1-2-3'
'{}-{}-{}'.format(*[1, 2, 3])  # Результат: '1-2-3'
'{one}-{two}-{three}'.format(two=2, one=1, three=3)  # Результат: '1-2-3'
'{one}-{two}-{three}'.format(**{'two': 2, 'one': 1, 'three': 3})  # Результат: '1-2-3'

После наименования может следовать любое количество выражений доступа к атрибуту или адресации по индексу.

  • Атрибут объекта адресуется при помощи . (точки).
  • Доступ к элементу при помощи [] (квадратных скобок).
import datetime
obj = {'one': {'sub': 1}, 'two': [10, 2, 30], 'three': datetime.datetime.now()}
'{one[sub]}-{two[1]}-{three.year}'.format(**obj)

Приведение используется для приведения типов перед форматированием.

Обычно возврат отформатированого значения возлагается на метод __format__(), однако бывают случаи, что требуется произвести принудительное приведение, например, к строке, в обход имеющейся реализации. Логика форматирования по умолчанию обходится при помощи приведения значения к строке перед вызовом __format__().

Поддерживаются три флага приведения:
* !s Вызывает str()
* !r Вызывает repr()
* !a Вызывает ascii().

import datetime 
demo = datetime.date.today()
result = '{!s}, {!r}, {!a}, {}'.format(demo, demo ,demo, demo)
print(result)

Формат содержит определение того как должно быть представлено значение, включая информацию о длине, выравнивании, дополнении строки, точности для чисел и тому подобное.

Можно задавать ширину поля и выравнивание

right = 'Начало{0:20}Конец'.format(7)
left = 'Начало{0:<20}Конец'.format(8)
center = 'Начало{0:^20}Конец'.format(9)

print(right)
print(left)
print(center)

Результат

Начало                   7Конец
Начало8                   Конец
Начало                   9Конец

Вывод вещественных чисел

print('{0}'.format(4/3))
print('{0:f}'.format(4/3))
print('{0:.2f}'.format(4/3))
print('{0:10.3f}'.format(4/3))

Результат

1.3333333333333333
1.333333
1.33
     1.333

str.index(sub[, start[, end]])

Возвращает наименьший индекс, по которому обнаруживается начало указанной подстроки в исходной.

sub : Подстрока, начальный индекс размещения которой требуется определить.

start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.

end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.

Работа данного метода аналогична работе str.find(), однако, если подстрока не найдена, возбуждается исключение

my_str = 'barbarian'
my_str.index('bar')  # 0
my_str.index('bar', 1)  # 3
my_str.index('bar', 1, 2)  # ValueError

Необязательные параметры start и end могут принимать любые значения, поддерживаемые механизмом срезов, а значит и отрицательные.

Метод должен использоваться только в случае необходимости найти индекс начала подстроки. Для обычного определения вхождения подстроки используйте оператор in:

my_str = 'barbarian'
'bar' in my_str  # True

str.isalnum()

Возвращает флаг, указывающий на то, содержит ли строка только цифры и/или буквы.

Вернёт True, если в строке хотя бы один символ и все символы строки являются цифрами и/или буквами, иначе — False.

''.isalnum()  # False
'  '.isalnum()  # False
'!@#'.isalnum()  # False
'abc'.isalnum()  # True
'123'.isalnum()  # True
'abc123'.isalnum()  # True

str.isalpha()

Возвращает флаг, указывающий на то, содержит ли строка только буквы.

Вернёт True, если в строке есть хотя бы один символ, и все символы строки являются буквами, иначе — False.

''.isalpha()  # False
'  '.isalpha()  # False
'!@#'.isalpha()  # False
'abc'.isalpha()  # True
'123'.isalpha()  # False
'abc123'.isalpha()  # False

str.isascii()

Возвращает флаг, указывающий на то, содержит ли строка только ASCII-символы.

Вернет True, если в строке содержаться только ASCII-символы или строка пустая, иначе вернет False.

str.isdigit()

Возвращает флаг, указывающий на то, содержит ли строка только цифры.

Вернёт True, если в строке хотя бы один символ и все символы строки являются цифрами, иначе — False.

''.isdigit()  # False
'  '.isdigit()  # False
'!@#'.isdigit()  # False
'abc'.isdigit()  # False
'123'.isdigit()  # True
'abc123'.isdigit()  # False

str.isidentifier()

Возвращает флаг, указывающий на то, является ли строка идентификатором.

Речь идёт об идентификаторах языка. Более подробная информация об идентификаторах и ключевых словах Питона содержится в разделе оригинальной документации Identifiers and keywords.

'continue'.isidentifier()  # True
'cat'.isidentifier()  # True
'function_name'.isidentifier()  # True
'ClassName'.isidentifier()  # True
'_'.isidentifier()  # True
'number1'.isidentifier()  # True
'1st'.isidentifier()  # False
'*'.isidentifier()  # False

Для проверки на то является ли строка зарезервированным идентификатором (например: def, class), используйте keyword.iskeyword().

str.islower()

Возвращает флаг, указывающий на то, содержит ли строка символы только нижнего регистра.

Вернёт True, если все символы строки поддерживающие приведение к регистру приведены к нижнему, иначе — False.

'нижний lower'.islower()  # True

Внимание
str.islower() может возвращать False, например, если строка содержит только символы не поддерживающие приведение к регистру:

'12'.islower()  # False

Для приведения символов строки к нижнему регистру используйте метод lower().

str.isnumeric()

Возвращает флаг, указывающий на то, содержит ли строка только числа.

Вернёт True, если в строке есть символы и все они присущи числам.

''.isnumeric()  # False
'a'.isnumeric()  # False
'0'.isnumeric()  # True
'10'.isnumeric()  # True
'⅓'.isnumeric()  # True
'Ⅻ'.isnumeric()  # True

К символам чисел относятся цифры, а также все символы, имеющие признак числа в Unicode, например: U+2155 (VULGAR FRACTION ONE FIFTH) — это любые символы, у которых признак Numeric_Type установлен равным Digit, или Decimal, или Numeric.

str.isprintable()

Возвращает флаг, указывающий на то, все ли символы строки являются печатаемыми.

Вернёт True, если строка пустая, либо если все её символы могут быть выведены на печать.

''.isprintable()  # True
' '.isprintable()  # True
'1'.isprintable()  # True
'a'.isprintable()  # True
''.isprintable()  # False (Group Separator)
''.isprintable()  # False (Escape)

Непечатаемыми символами являются символы Юникод из категории Other или Separator, исключая символ пробела из ASCII (0x20), который считается печатаемым.

Печатаемые символы не требуется экранировать в случае применения repr() к строке. Они не влияют на обработку строк, отправляемых в sys.stdout или sys.stderr.

str.isspace()

Возвращает флаг, указывающий на то, содержит ли строка только пробельные символы.

Вернёт True, если в строке есть символы и все они являются пробельными, иначе — False.

'  '.isspace()  # True
'n'.isspace()  # True
't'.isspace()  # True
' '.isspace()  # True (OGHAM SPACE MARK)
''.isspace()  # False
'!@#'.isspace()  # False
'abc'.isspace()  # False
'123'.isspace()  # False
'abc123'.isspace()  # False

Пробельными символами являются символы Юникод из категории Other или Separator, а также те, у которых свойство бинаправленности принимает значение WS, B, или S.

str.istitle()

Возвращает флаг, указывающий на то, начинается ли каждое из «слов» строки с заглавной буквы.

Вернёт True, если в строке хотя бы один символ или все «слова» в строке начинаются с заглавных букв, иначе — False.

'S'.istitle()  # True
'Some Text'.istitle()  # True
'Some text'.istitle()  # False
'S1 T2%'.istitle()  # True

str.isupper()

Возвращает флаг, указывающий на то, содержит ли строка символы только верхнего регистра.

Вернёт True, если все символы строки поддерживающие приведение к регистру приведены к верхнему, иначе — False.

str.join(iterable)

Возвращает строку, собранную из элементов указанного объекта, поддерживающего итерирование.

iterable : Объект со строками, поддерживающий итерирование.

В качестве соединительного элемента между указанными используется объект строки, предоставляющий данный метод.

dots = '..'
my_str = dots.join(['1', '2'])  # '1..2'
my_str = dots.join('ab')  # 'a..b'

Ожидается, что итерируемый объект выдаёт строки. Для массового приведения к строке можно воспользоваться функцией map(): dots.join(map(str, [100, 200])) # ‘100…200’

str.ljust(width[, fillchar])

Позиционирует влево указанную строку, дополняя её справа до указанной длины указанным символом.

width : Желаемая минимальная длина результирующей строки.

fillchar : Символ, которым следует расширять строку. По умолчанию — пробел.

Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.

''.ljust(3, 'w')  # www
'1'.ljust(4, 'w')  # 1www
'1'.ljust(0, 'w')  # 1
'1'.ljust(4)  # '1   '

Антонимом функции, позиционирующим строку вправо, является str.rjust().

Для расширения строки в обоих направлениях используйте str.center().

str.lower()

Возвращает копию исходной строки с символами приведёнными к нижнему регистру.

Алгоритм приведения к нижнему регистру описан в параграфе 3.13 стандарта Unicode.

'SoMe СлОнов'.lower()  # some слонов'

Для приведения символов строки к верхнему регистру используйте метод upper().

Для проверки того, содержит ли строка только символы в нижнем регистре используйте islower().

str.lower().islower() может возвращать False, если строка содержит только символы не поддерживающие приведение к регистру: ’12’.lower().islower() # False

str.lstrip([chars])

Возвращает копию указанной строки, с начала (слева l — left) которой устранены указанные символы.

chars=None : Строка с символами, которые требуется устранить. Если не указана, будут устранены пробельные символы. Это не префикс и не суффикс, это перечисление нужных символов.

'abca'.lstrip('ac')  # 'bca'

str.maketrans(x[, y[, z]])

Возвращает таблицу переводов, которую можно использовать в методе translate. В примере ниже букве «а» будет соответствовать «1», «b» — «2», а «с» — «3»

intab = "abc" 
outtab = "123" 
trantab = str.maketrans(intab, outtab) 

str.partition(sep)

Разбивает строку на три составляющие (начало, разделитель, конец) и возвращает в виде кортежа. Направление разбиения: слева направо.

sep : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов.

Возвращает кортеж из трёх элементов.

my_str = ''
my_str.partition('.')  # ('', '', '')

my_str = '12'
my_str.partition('.')  # ('12', '', '')

my_str = '.1.2'
my_str.partition('.')  # ('', '.', '1.2')

В случаях, когда требуется, чтобы разбиение строки происходило справа налево, используйте str.rpartition.

Когда требуется разбить строку на множество составляющих, используйте str.split.

str.replace(old, new[, count])

Возвращает копию строки, в которой заменены все вхождения указанной строки указанным значением.

old : Искомая подстрока, которую следует заменить.

new : Подстрока, на которую следует заменить искомую.

maxcount=None : Максимальное требуемое количество замен. Если не указано, будут заменены все вхождения искомой строки.

my_str = 'barbarian'
my_str = my_str.replace('bar', 'mur')  # 'murmurian'
my_str = my_str.replace('mur', 'bur', 1)  # 'burmurian'

str.rfind(sub[, start[, end]])

Возвращают индексы последнего вхождения искомой подстроки. Если же подстрока не найдена, то метод возвращает значение −1.

str.rindex(sub[, start[, end]])

Возвращает наибольший индекс, по которому обнаруживается конец указанной подстроки в исходной.

sub : Подстрока, начальный индекс размещения которой требуется определить.

start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.

end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.

Работа данного метода аналогична работе str.rfind(), однако, если подстрока не найдена, возбуждается исключение

my_str = 'barbarian'
my_str.rindex('bar')  # 3
my_str.rindex('bar', 1)  # 3
my_str.rindex('bar', 1, 2)  # ValueError

Необязательные параметры start и end могут принимать любые значения, поддерживаемые механизмом срезов, а значит и отрицательные.

str.rjust(width[, fillchar])

Позиционирует вправо указанную строку, дополняя её слева до указанной длины указанным символом.

width : Желаемая минимальная длина результирующей строки.

fillchar : Символ, которым следует расширять строку. По умолчанию — пробел.

Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.

''.rjust(3, 'w')  # www
'1'.rjust(4, 'w')  # www1
'1'.rjust(0, 'w')  # 1
'1'.rjust(4)  # '   1'

Антонимом функции, позиционирующим строку влево, является str.ljust().

Для расширения строки в обоих направлениях используйте str.center().

Когда требуется дополнить строку нулями слева, используйте str.zfill().

str.rpartition(sep)

Разбивает строку на три составляющие (начало, разделитель, конец) и возвращает в виде кортежа. Направление разбиения: справа налево.

sep : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов.
Возвращает кортеж из трёх элементов.

Поведение метода аналогично поведению str.partition за исключением направления разбиения строки.

my_str = ''
my_str.rpartition('.')  # ('', '', '')

my_str = '12'
my_str.rpartition('.')  # ('', '', '12')

my_str = '.1.2'
my_str.rpartition('.')  # ('.1', '.', '2')

str.rsplit(sep=None, maxsplit=-1)

Разбивает строку на части, используя разделитель, и возвращает эти части списком. Направление разбиения: справа налево.

sep=None : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов. Если не указан, то используется специальный алгоритм разбиения, для которого разделителем считается последовательность пробельных символов.

maxsplit=-1 : Максимальное количество разбиений, которое требуется выполнить. Если −1, то количество разбиений не ограничено.

Поведение метода аналогично поведению str.split за исключением направления разбиения строки.

str.rstrip([chars])

Возвращает копию указанной строки, с конца (справа r — right) которой устранены указанные символы.

chars=None : Строка с символами, которые требуется устранить. Если не указана, будут устранены пробельные символы. Это не префикс и не суффикс, это перечисление нужных символов.

'abca'.rstrip('ac')  # 'ab'

Когда требуется разбить строку на три составляющие (начало, разделитель, конец), используйте str.rpartition.

str.split(sep=None, maxsplit=-1)

Разбивает строку на части, используя разделитель, и возвращает эти части списком. Направление разбиения: слева направо.

sep=None : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов. Если не указан, то используется специальный алгоритм разбиения, для которого разделителем считается последовательность пробельных символов.

maxsplit=-1 : Максимальное количество разбиений, которое требуется выполнить. Если −1, то количество разбиений не ограничено.

Если указан разделитель, разбиение пустой строки вернёт список с единственным элементом — пустой строкой: [''].

'1,2,3'.split(',')  # ['1', '2', '3']
'1,2,3'.split(',', maxsplit=1)  # ['1', '2,3']

'1,2,,3,'.split(',')   # ['1', '2', '', '3', ''] 
'1   2   3'.split(' ')  # ['1', '', '', '2', '', '', '3']

Если разделитель не указан, разбиение пустой строки вернёт пустой список: [].

'1 2 3'.split()  # ['1', '2', '3']
'1 2 3'.split(maxsplit=1)  # ['1', '2 3']

'1   2   3'.split()  # ['1', '2', '3']  

В случаях, когда требуется, чтобы разбиение строки происходило справа налево, используйте str.rsplit. Когда требуется разбить строку на три составляющие (начало, разделитель, конец), используйте str.partition.

str.splitlines([keepends])

Разбивает строку на множество строк, возвращая их списком.

keepends=False — Флаг, указывающий на то следует ли оставлять в результирующем списке символы переноса строк. По умолчанию символы удаляются.

Разбиение строки на подстроки производится в местах, где встречаются символы переноса строк.

my_str = 'ab cnnde fgrklrn'
my_str.splitlines()  # ['ab c', '', 'de fg', 'kl']
my_str.splitlines(True)  # ['ab cn', 'n', 'de fgr', 'klrn']

В отличие от split(), которому можно передать символ-разделитель, данный метод для пустой строки вернёт пустой список, а символ переноса строки в конце не добавит в список дополнительного элемента.

''.splitlines()  # []
''.split('n')  # ['']

my_str = 'abn cdn'

my_str.splitlines()  # ['ab', 'cd']
my_str.split('n')  # ['ab', 'cd', '']

str.startswith(prefix[, start[, end]])

Возвращает флаг, указывающий на то, начинается ли строка с указанного префикса.

prefix : Строка-префикс, в наличии которой требуется удостовериться.

start : Позиция (индекс символа), с которой следует начать поиск. Поддерживает отрицательные значения.

end : Позиция (индекс символа), на которой следует завершить поиск. Поддерживает отрицательные значения.

my_str = 'Discworld'
my_str.startswith('Mad')  # False
my_str.startswith('Disc')  # True
my_str.startswith('Disc', 1)  # False
my_str.startswith('world', 4, 9)  # True

Для определения наличия постфикса в строке используйте str.endswith().

str.strip([chars])

Возвращает копию указанной строки, с обоих концов которой устранены указанные символы.

chars=None : Строка с символами, которые требуется устранить. Если не указана, будут устранены пробельные символы. Это не префикс и не суффикс, это перечисление нужных символов.

'abca'.strip('ac')  # 'b'

str.swapcase()

Возвращает копию строки, в которой каждая буква будет иметь противоположный регистр.

В ходе смены регистра, буквы в нижнем регистре преобразуются в верхний, а буквы в верхнем преобразуются в нижний.

'Кот ОбОрмот!'.swapcase()  # кОТ оБоРМОТ!

Внимание
Для 8-битных строк (Юникод) результат метода зависит от локали.
Следующее выражение не обязано быть истинным: `str`.swapcase().swapcase() == `str`.

str.title()

Возвращает копию строки, в которой каждое новое слово начинается с заглавной буквы и продолжается строчными.

В результирующей строке первая буква каждого нового слова становится заглавной, в то время как остальные становятся строчными. Такое написание характерно для заголовков в английском языке.

'кот ОбОрмот!'.title()  # Кот Обормот!

"they're bill's friends from the UK".title()  
# They'Re Bill'S Friends From The Uk

Алгоритм использует простое, независящее от языка определение слова — это группа последовательных букв. Такого определения во многих случаях достаточно, однако, в словах с апострофами (в английском они используются, например, в сокращениях и притяжательных формах) оно приводит к неожиданным результатам (см. пример выше). И в таких случаях лучше всего будет воспользоваться методом замены в регулярных выражениях (см. модуль re).

Для 8-битных строк (Юникод) результат метода зависит от текущей локали.

str.translate(table)

Возвращает строку, преобразованную с помощью таблицы переводов, которую в свою очередь можно получить с помощью str.maketrans. В примере ниже все
буквы «а» будут заменены на «1», а «b» — на «2».

trantab = str.maketrans("ab", "12")
print('abc test'.translate(trantab))

str.upper()

Возвращает копию исходной строки с символами приведёнными к верхнему регистру.

Алгоритм приведения к верхнему регистру описан в параграфе 3.13 стандарта Unicode.

'SoMe СлОнов'.upper()  # SOME СЛОНОВ

Для приведения символов строки к нижнему регистру используйте метод lower().

Для проверки того, содержит ли строка только символы в верхнем регистре используйте isupper().

str.zfill(width)

Дополняет указанную строку нулями слева до указанной минимальной длины.

width : Желаемая минимальная длина результирующей строки.

Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.
В ходе компоновки результирующей строки ведущие знаки *+* и *-* сохраняют своё место в её начале.

''.zfill(3)  # 000
'1'.zfill(4)  # 0001
'1'.zfill(0)  # 1
'-1'.zfill(4)  # -001
'a'.zfill(4)  # 000a
'-a'.zfill(4)  # -00a

Условно сходного результата можно также добиться при использовании метода str.rjust(), передав 0 в качестве второго аргумента.

Условным антонимом функции, добавляющим нули справа можно считать str.ljust(), передав 0 в качестве второго аргумента.

Текстовые переменные str в Питоне

Строковый тип str в Python используют для работы с любыми текстовыми данными. Python автоматически определяет тип str по кавычкам – одинарным или двойным:

        >>> stroka = 'Python'
>>> type(stroka)
<class 'str'>
>>> stroka2 = "code"
>>> type(stroka2)
<class 'str'>

    

Для решения многих задач строковую переменную нужно объявить заранее, до начала исполнения основной части программы. Создать пустую переменную str просто:

        stroka = ''
    

Или:

        stroka2 = ""
    

Если в самой строке нужно использовать кавычки – например, для названия книги – то один вид кавычек используют для строки, второй – для выделения названия:

        >>> print("'Самоучитель Python' - возможно, лучший справочник по Питону.")
'Самоучитель Python' - возможно, лучший справочник по Питону.
>>> print('"Самоучитель Python" - возможно, лучший справочник по Питону.')
"Самоучитель Python" - возможно, лучший справочник по Питону.

    

Использование одного и того же вида кавычек внутри и снаружи строки вызовет ошибку:

        >>> print(""Самоучитель Python" - возможно, лучший справочник по Питону.")
  File "<pyshell>", line 1
    print(""Самоучитель Python" - возможно, лучший справочник по Питону.")
                      ^
SyntaxError: invalid syntax

    

Кроме двойных " и одинарных кавычек ', в Python используются и тройные ''' – в них заключают текст, состоящий из нескольких строк, или программный код:

        >>> print('''В тройные кавычки заключают многострочный текст.
Программный код также можно выделить тройными кавычками.''')
В тройные кавычки заключают многострочный текст.
Программный код также можно выделить тройными кавычками.

    

Длина строки len в Python

Для определения длины строки используется встроенная функция len(). Она подсчитывает общее количество символов в строке, включая пробелы:

        >>> stroka = 'python'
>>> print(len(stroka))
6
>>> stroka1 = ' '
>>> print(len(stroka1))
1

    

Преобразование других типов данных в строку

Целые и вещественные числа преобразуются в строки одинаково:

        >>> number1 = 55
>>> number2 = 55.5
>>> stroka1 = str(number1)
>>> stroka2 = str(number2)
>>> print(type(stroka1))
<class 'str'>
>>> print(type(stroka2))
<class 'str'>

    

Решение многих задач значительно упрощается, если работать с числами в строковом формате. Особенно это касается заданий, где нужно разделять числа на разряды – сотни, десятки и единицы.

Сложение и умножение строк

Как уже упоминалось в предыдущей главе, строки можно складывать – эта операция также известна как конкатенация:

        >>> str1 = 'Python'
>>> str2 = ' - '
>>> str3 = 'самый гибкий язык программирования'
>>> print(str1 + str2 + str3)
Python - самый гибкий язык программирования

    

При необходимости строку можно умножить на целое число – эта операция называется репликацией:

        >>> stroka = '*** '
>>> print(stroka * 5)
*** *** *** *** ***

    

Подстроки

Подстрокой называется фрагмент определенной строки. Например, ‘abra’ является подстрокой ‘abrakadabra’. Чтобы определить, входит ли какая-то определенная подстрока в строку, используют оператор in:

        >>> stroka = 'abrakadabra'
>>> print('abra' in stroka)
True
>>> print('zebra' in stroka)
False

    

Для обращения к определенному символу строки используют индекс – порядковый номер элемента. Python поддерживает два типа индексации – положительную, при которой отсчет элементов начинается с 0 и с начала строки, и отрицательную, при которой отсчет начинается с -1 и с конца:

Положительные индексы 0 1 2 3 4 5 6
Пример строки P r o g l i b
Отрицательные индексы -7 -6 -5 -4 -3 -2 -1

Чтобы получить определенный элемент строки, нужно указать его индекс в квадратных скобках:

        >>> stroka = 'программирование'
>>> print(stroka[7])
м
>>> print(stroka[-1])
е

    

Срезы строк в Python

Индексы позволяют работать с отдельными элементами строк. Для работы с подстроками используют срезы, в которых задается нужный диапазон:

        >>> stroka = 'программирование'
>>> print(stroka[7:10])
мир

    

Диапазон среза [a:b] начинается с первого указанного элемента а включительно, и заканчивается на последнем, не включая b в результат:

        >>> stroka = 'программa'
>>> print(stroka[3:8])
грамм
    

Если не указать первый элемент диапазона [:b], срез будет выполнен с начала строки до позиции второго элемента b:

        >>> stroka = 'программa'
>>> print(stroka[:4])
прог

    

В случае отсутствия второго элемента [a:] срез будет сделан с позиции первого символа и до конца строки:

        >>> stroka = 'программa'
>>> print(stroka[3:])
граммa

    

Если не указана ни стартовая, ни финальная позиция среза, он будет равен исходной строке:

        >>> stroka = 'позиции не заданы'
>>> print(stroka[:])
позиции не заданы

    

Шаг среза

Помимо диапазона, можно задавать шаг среза. В приведенном ниже примере выбирается символ из стартовой позиции среза, а затем каждая 3-я буква из диапазона:

        >>> stroka = 'Python лучше всего подходит для новичков.'
>>> print(stroka[1:15:3])
yoлшв

    

Шаг может быть отрицательным – в этом случае символы будут выбираться, начиная с конца строки:

        >>> stroka = 'это пример отрицательного шага'
>>> print(stroka[-1:-15:-4])
а нт

    

Срез [::-1] может оказаться очень полезным при решении задач, связанных с палиндромами:

        >>> stroka = 'А роза упала на лапу Азора'
>>> print(stroka[::-1])
арозА упал ан алапу азор А

    

Замена символа в строке

Строки в Python относятся к неизменяемым типам данных. По этой причине попытка замены символа по индексу обречена на провал:

        >>> stroka = 'mall'
>>> stroka[0] = 'b'
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: 'str' object does not support item assignment

    

Но заменить любой символ все-таки можно – для этого придется воспользоваться срезами и конкатенацией. Результатом станет новая строка:

        >>> stroka = 'mall'
>>> stroka = 'b' + stroka[1:]
>>> print(stroka)
ball

    

Более простой способ «замены» символа или подстроки – использование метода replace(), который мы рассмотрим ниже.

Полезные методы строк

Python предоставляет множество методов для работы с текстовыми данными. Все методы можно сгруппировать в четыре категории:

  • Преобразование строк.
  • Оценка и классификация строк.
  • Конвертация регистра.
  • Поиск, подсчет и замена символов.

Рассмотрим эти методы подробнее.

Преобразование строк

Три самых используемых метода из этой группы – join(), split() и partition(). Метод join() незаменим, если нужно преобразовать список или кортеж в строку:

        >>> spisok = ['Я', 'изучаю', 'Python']
>>> stroka = ' '.join(spisok)
>>> print(stroka)
Я изучаю Python

    

При объединении списка или кортежа в строку можно использовать любые разделители:

        >>> kort = ('Я', 'изучаю', 'Django')
>>> stroka = '***'.join(kort)
>>> print(stroka)
Я***изучаю***Django

    

Метод split() используется для обратной манипуляции – преобразования строки в список:

        >>> text = 'это пример текста для преобразования в список'
>>> spisok = text.split()
>>> print(spisok)
['это', 'пример', 'текста', 'для', 'преобразования', 'в', 'список']

    

По умолчанию split() разбивает строку по пробелам. Но можно указать любой другой символ – и на практике это часто требуется:

        >>> text = 'цвет: синий; вес: 1 кг; размер: 30х30х50; материал: картон'
>>> spisok = text.split(';')
>>> print(spisok)
['цвет: синий', ' вес: 1 кг', ' размер: 30х30х50', ' материал: картон']

    

Метод partition() поможет преобразовать строку в кортеж:

        >>> text = 'Python - простой и понятный язык'
>>> kort = text.partition('и')
>>> print(kort)
('Python - простой ', 'и', ' понятный язык')

    

В отличие от split(), partition() учитывает только первое вхождение элемента-разделителя (и добавляет его в итоговый кортеж).

Оценка и классификация строк

В Python много встроенных методов для оценки и классификации текстовых данных. Некоторые из этих методов работают только со строками, в то время как другие универсальны. К последним относятся, например, функции min() и max():

        >>> text = '12345'
>>> print(min(text))
1
>>> print(max(text))
5


    

В Python есть специальные методы для определения типа символов. Например, isalnum() оценивает, состоит ли строка из букв и цифр, либо в ней есть какие-то другие символы:

        >>> text = 'abracadabra123456'
>>> print(text.isalnum())
True
>>> text1 = 'a*b$ra cadabra'
>>> print(text1.isalnum())
False

    

Метод isalpha() поможет определить, состоит ли строка только из букв, или включает специальные символы, пробелы и цифры:

        >>> text = 'программирование'
>>> print(text.isalpha())
True
>>> text2 = 'password123'
>>> print(text2.isalpha())
False

    

С помощью метода isdigit() можно определить, входят ли в строку только цифры, или там есть и другие символы:

        >>> text = '1234567890'
>>> print(text.isdigit())
True
>>> text2 = '123456789o'
>>> print(text2.isdigit())
False

    

Поскольку вещественные числа содержат точку, а отрицательные – знак минуса, выявить их этим методом не получится:

        >>> text = '5.55'
>>> print(text.isdigit())
False
>>> text1 = '-5'
>>> print(text1.isdigit())
False
    

Если нужно определить наличие в строке дробей или римских цифр, подойдет метод isnumeric():

        >>> text = '½⅓¼⅕⅙'
>>> print(text.isdigit())
False
>>> print(text.isnumeric())
True

    

Методы islower() и isupper() определяют регистр, в котором находятся буквы. Эти методы игнорируют небуквенные символы:

        >>> text = 'abracadabra'
>>> print(text.islower())
True
>>> text2 = 'Python bytes'
>>> print(text2.islower())
False
>>> text3 = 'PYTHON'
>>> print(text3.isupper())
True

    

Метод isspace() определяет, состоит ли анализируемая строка из одних пробелов, или содержит что-нибудь еще:

        >>> stroka = '   '
>>> print(stroka.isspace())
True
>>> stroka2 = '  a  '
>>> print(stroka2.isspace())
False

    

Конвертация регистра

Как уже говорилось выше, строки относятся к неизменяемым типам данных, поэтому результатом любых манипуляций, связанных с преобразованием регистра или удалением (заменой) символов будет новая строка.

Из всех методов, связанных с конвертацией регистра, наиболее часто используются на практике два – lower() и upper(). Они преобразуют все символы в нижний и верхний регистр соответственно:

        >>> text = 'этот текст надо написать заглавными буквами'
>>> print(text.upper())
ЭТОТ ТЕКСТ НАДО НАПИСАТЬ ЗАГЛАВНЫМИ БУКВАМИ
>>> text = 'зДесь ВСе букВы рАзныЕ, а НУжнЫ проПИСНыЕ'
>>> print(text.lower())
здесь все буквы разные, а нужны прописные

    

Иногда требуется преобразовать текст так, чтобы с заглавной буквы начиналось только первое слово предложения:

        >>> text = 'предложение должно начинаться с ЗАГЛАВНОЙ буквы.'
>>> print(text.capitalize())
Предложение должно начинаться с заглавной буквы.

    

Методы swapcase() и title() используются реже. Первый заменяет исходный регистр на противоположный, а второй – начинает каждое слово с заглавной буквы:

        >>> text = 'пРИМЕР иСПОЛЬЗОВАНИЯ swapcase'
>>> print(text.swapcase())
Пример Использования SWAPCASE
>>> text2 = 'тот случай, когда нужен метод title'
>>> print(text2.title())
Тот Случай, Когда Нужен Метод Title

    

Поиск, подсчет и замена символов

Методы find() и rfind() возвращают индекс стартовой позиции искомой подстроки. Оба метода учитывают только первое вхождение подстроки. Разница между ними заключается в том, что find() ищет первое вхождение подстроки с начала текста, а rfind() с конца:

        >>> text = 'пример текста, в котором нужно найти текстовую подстроку'
>>> print(text.find('текст'))
7
>>> print(text.rfind('текст'))
37

    

Такие же результаты можно получить при использовании методов index() и rindex() – правда, придется предусмотреть обработку ошибок, если искомая подстрока не будет обнаружена:

        >>> text = 'Съешь еще этих мягких французских булок!'
>>> print(text.index('еще'))
6
>>> print(text.rindex('чаю'))
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
ValueError: substring not found

    

Если нужно определить, начинается ли строка с определенной подстроки, поможет метод startswith():

        >>> text = 'Жила-была курочка Ряба'
>>> print(text.startswith('Жила'))
True

    

Чтобы проверить, заканчивается ли строка на нужное окончание, используют endswith():

        >>> text = 'В конце всех ждал хэппи-енд'
>>> print(text.endswith('енд'))
True

    

Для подсчета числа вхождений определенного символа или подстроки применяют метод count() – он помогает подсчитать как общее число вхождений в тексте, так и вхождения в указанном диапазоне:

        >>> text = 'Съешь еще этих мягких французских булок, да выпей же чаю!'
>>> print(text.count('е'))
5
>>> print(text.count('е', 5, 25))
2

    

Методы strip(), lstrip() и rstrip() предназначены для удаления пробелов. Метод strip() удаляет пробелы в начале и конце строки, lstrip() – только слева, rstrip() – только справа:

        >>> text = '    здесь есть пробелы и слева, и справа    '
>>> print('***', text.strip(), '***')
*** здесь есть пробелы и слева, и справа ***
>>> print('***', text.lstrip(), '***')
*** здесь есть пробелы и слева, и справа     ***
>>> print('***', text.rstrip(), '***')
***     здесь есть пробелы и слева, и справа ***
    

Метод replace() используют для замены символов или подстрок. Можно указать нужное количество замен, а сам символ можно заменить на пустую подстроку – проще говоря, удалить:

        >>> text = 'В этой строчке нужно заменить только одну "ч"'
>>> print(text.replace('ч', '', 1))
В этой строке нужно заменить только одну "ч"

    

Стоит заметить, что метод replace() подходит лишь для самых простых вариантов замены и удаления подстрок. В более сложных случаях необходимо использование регулярных выражений, которые мы будем изучать позже.

Практика

Задание 1

Напишите программу, которая получает на вход строку и выводит:

  • количество символов, содержащихся в тексте;
  • True или False в зависимости от того, являются ли все символы буквами и цифрами.

Решение:

        text = input()
print(len(text))
print(text.isalpha())

    

Задание 2

Напишите программу, которая получает на вход слово и выводит True, если слово является палиндромом, или False в противном случае. Примечание: для сравнения в Python используется оператор ==.

Решение:

        text = input().lower()
print(text == text[::-1])

    

Задание 3

Напишите программу, которая получает строку с именем, отчеством и фамилией, написанными в произвольном регистре, и выводит данные в правильном формате. Например, строка алеКСандр СЕРГЕЕВИЧ ПушкиН должна быть преобразована в Александр Сергеевич Пушкин.

Решение:

        text = input()
print(text.title())

    

Задание 4

Имеется строка 12361573928167047230472012. Напишите программу, которая преобразует строку в текст один236один573928один670472304720один2.

Решение:

        text = '12361573928167047230472012'
print(text.replace('1', 'один'))

    

Задание 5

Напишите программу, которая последовательно получает на вход имя, отчество, фамилию и должность сотрудника, а затем преобразует имя и отчество в инициалы, добавляя должность после запятой.

Пример ввода:

        Алексей
Константинович
Романов
бухгалтер

    

Вывод:

        А. К. Романов, бухгалтер
    

Решение:

        first_name, patronymic, last_name, position = input(), input(), input(), input()
print(first_name[0] + '.', patronymic[0] + '.', last_name + ',', position)

    

Задание 6

Напишите программу, которая получает на вход строку текста и букву, а затем определяет, встречается ли данная буква (в любом регистре) в тексте. В качестве ответа программа должна выводить True или False.

Пример ввода:

        ЗонтИК
к

    

Вывод:

        True
    

Решение:

        text = input().lower()
letter = input()
print(letter in text)

    

Задание 7

Напишите программу, которая определяет, является ли введенная пользователем буква гласной. В качестве ответа программы выводит True или False, буквы могут быть как в верхнем, так и в нижнем регистре.

Решение:

        vowels = 'аиеёоуыэюя'
letter = input().lower()
print(letter in vowels)

    

Задание 8

Напишите программу, которая принимает на вход строку текста и подстроку, а затем выводит индексы первого вхождения подстроки с начала и с конца строки (без учета регистра).

Пример ввода:

        Шесть шустрых мышат в камышах шуршат
ша

    

Вывод:

        16 33
    

Решение:

        text, letter = input().lower(), input()
print(text.find(letter), text.rfind(letter))

    

Задание 9

Напишите программу для подсчета количества пробелов и непробельных символов в введенной пользователем строке.

Пример ввода:

        В роще, травы шевеля, мы нащиплем щавеля
    

Вывод:

        Количество пробелов: 6, количество других символов: 34
    

Решение:

        text = input()
nospace = text.replace(' ', '')
print(f"Количество пробелов: {text.count(' ')}, количество других символов: {len(nospace)}")

    

Задание 10

Напишите программу, которая принимает строку и две подстроки start и end, а затем определяет, начинается ли строка с фрагмента start, и заканчивается ли подстрокой end. Регистр не учитывать.

Пример ввода:

        Программирование на Python - лучшее хобби
про
про

    

Вывод:

        True
False

    

Решение:

        text, start, end = input().lower(), input(), input()
print(text.startswith(start))
print(text.endswith(end))

    

Подведем итоги

В этой части мы рассмотрели самые популярные методы работы со строками – они пригодятся для решения тренировочных задач и в разработке реальных проектов. В следующей статье будем разбирать методы работы со списками.

***

📖 Содержание самоучителя

  1. Особенности, сферы применения, установка, онлайн IDE
  2. Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
  3. Типы данных: преобразование и базовые операции
  4. Методы работы со строками
  5. Методы работы со списками и списковыми включениями
  6. Методы работы со словарями и генераторами словарей
  7. Методы работы с кортежами
  8. Методы работы со множествами
  9. Особенности цикла for
  10. Условный цикл while
  11. Функции с позиционными и именованными аргументами
  12. Анонимные функции
  13. Рекурсивные функции
  14. Функции высшего порядка, замыкания и декораторы
  15. Методы работы с файлами и файловой системой

***

Материалы по теме

  • ТОП-15 трюков в Python 3, делающих код понятнее и быстрее

Понравилась статья? Поделить с друзьями:
  • Как изменить региональный формат данных
  • Как изменить региональный стандарт языка
  • Как изменить региональные стандарты
  • Как изменить региональные настройки windows 10
  • Как изменить регион яндекс музыка