В этой статье мы рассмотрим полезные строковые методы Python для манипулирования строковыми ( str) объектами, такие как объединение, разделение и использование заглавных букв. Каждый метод, описанный в этой статье, будет включать объяснение с соответствующим примером. Мы также закончим небольшой задачей, которую вы должны попытаться оценить, насколько вы поняли тему.
Строки являются неотъемлемой частью каждого языка программирования и одним из наиболее часто используемых типов данных в Python. Они составляют последовательности, которые при объединении могут образовывать слова, предложения и т. д. Как и любой другой язык программирования, Python имеет собственную уникальную реализацию строкового типа данных. Строки представляют собой последовательность неизменяемых символов Юникода, заключенных в одинарные, двойные или тройные кавычки. «Неизменяемая» строка — это та, которая после объявления не может быть изменена; вместо этого создается другой строковый объект.
Примечание. Эта статья посвящена Python 3. Python 2 использует эту unicode()функцию для выполнения тех же действий, которые мы обсудим здесь. Также обратите внимание, что старый str()класс из Python 2 стал bytes()классом в Python 3.
Строка Python выглядит так:
greeting = "Hello, World!"
Примечание: в отличие от Java или других языков программирования, Python не поддерживает символьный тип данных. Таким образом, один символ, заключенный в кавычки, по- ’c’прежнему является строкой.
В Python bytes()класс возвращает неизменяемую последовательность объектов байтов. У них есть префикс bв одинарных кавычках ’’, представленный в виде b’xxx’. Однако, как и строковые литералы, байтовые литералы также могут иметь одинарные, двойные или тройные кавычки.
- Тип текстовой последовательности и класс str
- Строковые методы Python: обзор
- Строковые методы Python, возвращающие модифицированную версию строки
- str.capitalize()
- str.center(width[, fillchar])
- str.encode(encoding=’utf-8′, errors=’strict’)
- str.format(*args, **kwargs)
- str.lower()
- str.removeprefix(prefix, /)
- str.removesuffix(suffix, /)
- str.replace(old, new[, count])
- str.strip([chars])
- str.title()
- str.upper()
- Строковые методы Python для соединения и разделения строк
- str.join(iterable)
- str.split(sep=None, maxsplit=- 1)
- Строковые методы Python для выполнения запросов к строке
- str.count(sub[, start[, end]])
- str.find(sub[, start[, end]])
- str.index(sub[, start[, end]])
- Строковые методы Python для возврата логического значения
- str.endswith(suffix[, start[, end]])
- str.isalnum()
- str.isalpha()
- str.isascii()
- str.isdecimal()
- str.isnumeric()
- str.islower()
- str.isupper()
- str.startswith(prefix[, start[, end]])
- Методы Python Bytes, возвращающие строку
- bytes.decode(encoding=’utf-8′, errors=’strict’)
- Заключение
Тип текстовой последовательности и класс str
Строки — это один из встроенных типов Python. Это означает, что строковые типы данных, как и другие типы, встроены в интерпретатор Python.
Письменный текст в Python создается строковыми объектами или строковыми литералами. Строковые литералы Python могут быть записаны в одинарных, двойных или тройных кавычках. Когда одинарная кавычка используется для строкового литерала, двойная кавычка может быть встроена без каких-либо ошибок, и наоборот. Тройные кавычки позволяют использовать строки, которые могут занимать несколько строк, без использования обратной косой черты для экранирования символов новой строки.
Вот строковый литерал с одинарными кавычками:
string_one = 'String one'
Вот строковый литерал с двойными кавычками:
string_two = "String two"
Вот строковый литерал с тройными кавычками:
string_three = """ This string covers more than one line. """
Строки также можно создавать с помощью конструктора strиз других объектов. Конструктор str()возвращает печатную строковую версию данного объекта.
Класс Python strможно использовать для создания строковых объектов. Конструктор str()может принимать объект в качестве аргумента и неявно вызывать dunder объекта, __str__()чтобы вернуть строковое представление этого объекта:
number = 23 print(number, 'is an object of ', type(number)) print(dir(number)) number = str(number) print(number, 'is an object of ', type(number))
Вот вывод приведенного выше кода:
23 is an object of <class 'int'> 23 is an object of <class 'str'>
Переменная numberизначально была intобъектом. Однако strконструктор преобразует его в строковый объект.
У каждого объекта Python есть метод dunder str (), который вычисляет строковую версию этого объекта.
Простой взгляд на свойства и методы объекта с помощью встроенной функции dir() покажет __str__()метод, среди прочего. Мы можем создать строковую версию объекта из определенного объекта, явно вызвав его __str__()метод, как показано в примере ниже:
price = 15.25 print(dir(price)) print(type(price)) print(type(price.__str__()))
Вот вывод приведенного выше кода:
[... '__sizeof__', '__str__', '__sub__', ...] <class 'float'> <class 'str'>
Строковые методы Python: обзор
Поскольку в Python строки рассматриваются как последовательности, они реализуют все операции с последовательностями, такие как конкатенация, срез и т. д.:
>>> word = 'golden' >>> len(word) 6 >>> word + 'age' 'goldenage' >>> 'la' * 3 'lalala' >>>
Помимо операций с последовательностями строк, существуют и другие дополнительные методы, связанные со строковыми объектами. Некоторые из этих методов полезны для форматирования строк, поиска подстроки в другой строке, обрезки пробелов, выполнения определенных проверок заданной строки и т. д.
Стоит отметить, что эти строковые методы не изменяют исходную строку; поскольку строки в Python неизменяемы, изменение строки невозможно. Большинство строковых методов возвращают только измененную копию исходной строки или логическое значение, в зависимости от обстоятельств.
Давайте теперь разберем некоторые строковые методы Python с примерами.
Строковые методы Python, возвращающие модифицированную версию строки
str.capitalize()
Этот метод возвращает копию строки с первым символом в верхнем регистре, а остальные в нижнем регистре.
Пример 1:
>>> "i Enjoy traveling. Do you?".capitalize() 'I enjoy traveling. do you?' >>>
str.center(width[, fillchar])
Этот метод возвращает центрированную строку, дополненную заданной fillcharшириной. Если ширина равна или меньше длины строки len(s), возвращается исходная строка.
Метод принимает два параметра: widthи fillchar. указывает widthдлину строки, включая символ заполнения. fillchar— необязательный параметр, используемый для заполнения строки.
Пример 2:
>>> sentence = 'i Enjoy traveling. Do you?' >>> len(sentence) 26 >>> sentence.center(31) ' i Enjoy traveling. Do you? ' >>> sentence.center(30) ' i Enjoy traveling. Do you? '
str.encode(encoding=’utf-8′, errors=’strict’)
Этот метод возвращает строку, закодированную в байтах.
По умолчанию строки, передаваемые функции, кодируются в utf-8, и UnicodeEncodeErrorпри возникновении ошибки возникает исключение. Аргумент errorsключевого слова указывает, как обрабатываются ошибки — например strict, вызывает исключение, ignoreигнорирует любые возникающие ошибки и т. д. Есть и другие варианты кодирования, которые стоит проверить.
Пример 3:
>>> sentence = "i Enjoy traveling. Do you, 山本さん?" >>> sentence.encode() b'i Enjoy traveling. Do you, \xe5\xb1\xb1\xe6\x9c\xac\xe3\x81\x95\xe3\x82\x93?' >>> sentence.encode(encoding='ascii') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode characters in position 27-30: ordinal not in range(128) >>> sentence.encode(encoding='ascii', errors='replace') b'i Enjoy traveling. Do you, ?????'
Подробнее об обработке исключений можно прочитать в A Guide to Python Exception Handling.
str.format(*args, **kwargs)
Этот метод возвращает копию строки, где каждое поле замены заменяется строковым значением соответствующего аргумента. Строка, для которой вызывается этот метод, может содержать буквенный текст или поля замены, разделенные фигурными скобками {}. Каждое поле замены содержит либо числовой индекс позиционного аргумента, либо имя ключевого аргумента.
Фигурные скобки ( {}) служат заполнителем для позиционных *argsили ключевых **kwargsаргументов, которые передаются методу format().
Пример 4:
>>> "I bought {0} apples and the cost {1:.2f} Ghana cedis.".format(2, 18.70) 'I bought 2 apples and the cost 18.70 Ghana cedis.' >>> "My name is {first_name}, and I'm a {profession}.".format(first_name='Ben', profession='doctor') "My name is Ben, and I'm a doctor." >>>
В приведенном выше примере {0}это заполнитель для первого аргумента 2метода format(). {1:.2f}действует вместо 18.70. Указывает.2f, что вывод должен отображать число с плавающей запятой с двумя десятичными знаками.
first_nameи professionявляются заполнителями для аргументов ключевого слова, переданных методу format().
Подробнее о синтаксисе строкового формата можно прочитать в документации Python.
str.lower()
Этот метод возвращает копию строки с любым символом из верхнего регистра в нижний регистр.
Пример 5:
>>> 'i Enjoy traveling. Do you?'.lower() 'i enjoy traveling. do you?' >>>
str.removeprefix(prefix, /)
Этот метод возвращает копию строки с удаленным указанным префиксом. Если указанный префикс не найден, возвращается исходная строка.
Пример 6:
>>> 'i Enjoy traveling. Do you?'.removeprefix('i') ' Enjoy traveling. Do you?' >>>
str.removesuffix(suffix, /)
Этот метод возвращает копию строки с удаленным указанным суффиксом. Если указанный суффикс не найден, возвращается исходная строка.
Пример 7:
>>> 'i Enjoy traveling. Do you?'.removesuffix('Do you?') 'i Enjoy traveling. ' >>>
str.replace(old, new[, count])
Этот метод возвращает строку, в которой все вхождения старой подстроки заменены новой. Если countаргумент задан, countзаменяется все количество вхождений.
Пример 8:
>>> 'i Enjoy traveling. Do you?'.replace('Enjoy','dislike') 'i dislike traveling. Do you?' >>> 'Things fall apart'.replace('a','e',1) 'Things fell apart' >>>
str.strip([chars])
Этот метод возвращает новую строку с символами, указанными в аргументе, удаленными из начала и конца старой строки. По умолчанию он удаляет пробелы, если charsаргумент не указан.
Операция strip()метода выполняется для каждого символа, а не для каждой строки.
Пример 9:
>>> word1 = ' whitespace '.strip() >>> word1 'whitespace' >>> word2 = 'exercise'.strip('e') >>> word2 'xercis' >>> word3 = 'chimpanze'.strip('acepnz') >>> word3 'him' >>>
Как видно из приведенного выше примера, где charsаргумент не указан, пробел word1удаляется. Когда для строки, на которую ссылается word2переменная, вызывается strip()метод с eаргументом, начальные и конечные eсимволы отсутствуют в возвращаемом значении.
В word3, некоторые случайные символы передаются в качестве аргумента, и эти символы удаляются из начала и конца строки — до тех пор, пока в строке не будет символа, который не соответствует ни одному из аргументов.
str.title()
Этот метод возвращает копию строки, где каждое слово начинается с символа верхнего регистра, а остальные символы — строчными.
Метод title()преобразует первый символ каждого слова в верхний регистр — будь то определенные артикли, такие как «the», предлоги и т. д.
Пример 10:
>>> 'i Enjoy traveling. Do you?'.title() 'I Enjoy Traveling. Do You?' >>>
str.upper()
Этот метод возвращает копию строки со всеми символами, преобразованными в верхний регистр.
Пример 11:
>>> 'i Enjoy traveling. Do you?'.upper() 'I ENJOY TRAVELING. DO YOU?' >>>
Строковые методы Python для соединения и разделения строк
str.join(iterable)
Этот метод возвращает строку, созданную путем объединения других строк в итерируемом объекте. Если итерируемый объект имеет нестроковые значения, TypeErrorвозникает исключение.
Пример 12:
>>> words = ["Accra", "is", "a", "beautiful", "city"] >>> ' '.join(words) 'Accra is a beautiful city' >>> names = ['Abe', 'Fred', 'Bryan'] >>> '-'.join(names) 'Abe-Fred-Bryan' >>>
str.split(sep=None, maxsplit=- 1)
Этот метод возвращает список слов или символов в строке, разделенной указанным разделителем.
Метод принимает два параметра:
- sep: разделитель/разделитель, указывающий, где происходит разделение. Если он не указан, используются пробелы.
- maxsplit: указывает максимально допустимое количество разделений. Если он не указан, выполняются все возможные разделения
Пример 13:
>>> 'i Enjoy traveling. Do you?'.split() ['i', 'Enjoy', 'traveling.', 'Do', 'you?'] >>> 'i Enjoy traveling. Do you?'.split(' ', 2) ['i', 'Enjoy', 'traveling. Do you?'] >>>
Строковые методы Python для выполнения запросов к строке
str.count(sub[, start[, end]])
Этот метод возвращает количество раз, когда подстрока встречается в данной строке. Он принимает два необязательных аргумента — startи end— которые указывают, где начинается и где заканчивается счет.
Пример 14:
>>> 'i enjoy traveling. do you?'.count('e') 2 >>>
str.find(sub[, start[, end]])
Этот метод возвращает индекс первого вхождения подстроки в исходной строке. Он принимает форму среза s[start:end]. Если подстрока не найдена, −1возвращается.
Метод find()использует нарезку для поиска подстроки в другой подстроке. Нарезка в Python означает извлечение подпоследовательности, а в данном случае подстроки из другой последовательности строк с использованием индексных точек startи stop.
Срез Python имеет следующее понятие:
sequence[start:stop]
С помощью этого find()метода поиск идет от начала строки до конца, если startи stopиндексные точки не заданы. Когда подстрока найдена, метод возвращает целое число, указывающее индекс первого символа подстроки.
Метод принимает три параметра:
- sub: искомая подстрока в исходной строке
- start: указывает, где должен начаться поиск
- end: указывает, где должен остановиться поиск
Пример 15:
>>> 'i Enjoy traveling. Do you?'.find('traveling') 8 >>> 'I live in Accra Ghana'.find('acc', 8, 16) -1 >>>
str.index(sub[, start[, end]])
Этот метод возвращает индекс подстроки в исходной строке. Он работает точно так же, как find()метод, за исключением того, что он вызывает ValueErrorисключение, когда подстрока не найдена.
Метод принимает три параметра:
- sub: искомая подстрока в исходной строке
- start: указывает, где должен начаться поиск
- end: указывает, где должен остановиться поиск
Пример 16:
>>> 'i Enjoy traveling. Do you?'.index('car') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: substring not found >>>
Как видно из приведенного выше фрагмента кода, ValueErrorвозникает исключение, поскольку carв нашей исходной строке не найдена подстрока.
Строковые методы Python для возврата логического значения
str.endswith(suffix[, start[, end]])
Этот метод возвращает значение True, если строка заканчивается указанным суффиксом; в противном случае возвращается False.
Означает suffix[, start[, end]], что поиск подстроки начнется с начала строки или заданного индекса startдо конца строки или заданного индекса end.
Метод принимает три параметра:
- suffix: строка или кортеж для поиска
- start: указывает, где должен начинаться поиск суффикса
- end: указывает, где должен остановиться поиск суффикса
Пример 17:
>>> 'i Enjoy traveling. Do you?'.endswith('you?') True >>>
str.isalnum()
Этот метод возвращает значение True, если строка содержит буквенно-цифровые символы и есть хотя бы один символ; в противном случае возвращается False.
Пример 18:
>>> 'i Enjoy traveling. Do you?'.isalnum() False >>>
str.isalpha()
Этот метод возвращает значение True, если все символы строки являются буквенными и есть хотя бы один символ; в противном случае возвращается False.
Пример 19:
>>> "Python".isalnum() True >>> "Python.".isalnum() False >>> "パイソン".isalnum() True >>> "パイソン。".isalnum() False >>>
str.isascii()
Этот метод возвращает значение True, если все символы в строке ASCII или она пуста; в противном случае возвращается False.
Пример 20:
>>> 'i Enjoy traveling. Do you?'.isascii() True >>> "体当たり".isascii() False >>>
str.isdecimal()
Этот метод возвращает значение True, если строка содержит все десятичные символы и есть хотя бы один символ; в противном случае возвращается False.
Пример 21:
>>> 'i Enjoy traveling. Do you?'.isdecimal() False >>> '10'.isdecimal() True >>>
str.isnumeric()
Этот метод возвращает значение True, если строка содержит все числовые символы и есть хотя бы один символ; в противном случае возвращается False.
Пример 22:
>>> 'i Enjoy traveling. Do you?'.isnumeric() False >>> '1000.04'.isnumeric() False >>> '1000'.isnumeric() True >>>
str.islower()
Этот метод возвращает значение True, если все символы строки написаны в нижнем регистре и есть хотя бы один символ в верхнем регистре; в противном случае возвращается False.
Пример 23:
>>> 'i Enjoy traveling. Do you?'.islower() False >>> 'i enjoy traveling. do you?'.islower() True >>>
str.isupper()
Этот метод возвращает значение True, если все символы строки написаны в верхнем регистре и есть хотя бы один символ в верхнем регистре; в противном случае возвращается False.
Пример 24:
>>> 'i Enjoy traveling. Do you?'.isupper() False >>> 'I ENJOY TRAVELING. DO YOU?'.isupper() True >>>
str.startswith(prefix[, start[, end]])
Этот метод возвращает значение True, если строка заканчивается указанным префиксом; в противном случае возвращается False.
Метод принимает три параметра:
- suffix: строка или кортеж для поиска
- start: указывает, где должен начинаться поиск префикса
- end: указывает, где должен остановиться поиск префикса
Пример 25:
>>> 'i Enjoy traveling. Do you?'.startswith('i') True >>>
Методы Python Bytes, возвращающие строку
bytes.decode(encoding=’utf-8′, errors=’strict’)
Этот метод возвращает строку, декодированную из байтов.
По умолчанию используется кодировка ’utf-8′, и UnicodeDecodeErrorпри возникновении ошибки возникает исключение. strict, ignoreи replaceявляются аргументами ключевого слова error, определяющими способ обработки исключений.
Пример 26
>>> b'i Enjoy traveling. Do you, \xe5\xb1\xb1\xe6\x9c\xac\xe3\x81\x95\xe3\x82\x93?'.decode() 'i Enjoy traveling. Do you, 山本さん?' >>> b'i Enjoy traveling. Do you, \xe5\xb1\xb1\xe6\x9c\xac\xe3\x81\x95\xe3\x82\x93?'.decode(encoding='ascii') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 27: ordinal not in range(128) >>>
Заключение
В программировании важно иметь возможность манипулировать строками текста, например, при форматировании пользовательского ввода.
В Python есть строки, но нет символьного типа данных. Так что это ’c’в значительной степени строка, как есть ’character’.
В отличие от языков программирования C, в Python есть несколько отличных методов форматирования строк, а также выполнения проверок этих строк с меньшим количеством кода.