string Module

In this lesson, you’ll learn about the string module. This module will help you quickly access some string constants. Here’s an example:
Here are some useful constants:
- string.ascii_letters
- string.ascii_uppercase
- string.ascii_lowercase
- string.digits
- string.hexdigits
- string.octdigits
- string.punctuation
- string.printable
- string.whitespace
abhinav on Jan. 7, 2021
I’m having trouble understanding why the all statement stops after the first print.

Bartosz Zaczyński RP Team on Jan. 7, 2021
@abhinav TL;DR It’s because you’re using a generator expression, which evaluates lazily.
(By the way, functions including the built-on all() one, are expressions and not statements.)
Let’s take a look at the all() function’s documentation:
Return True if all elements of the iterable are true (or if the iterable is empty). Equivalent to:
In other words, it expects a sequence such as the generator expression that you’re passing in your example. Perhaps, it would be easier to understand what’s happening if we used a list instead:
So, the function will get a sequence comprised of five None elements. Now, it will iterate over those elements, testing if one of them is falsy. Unless all elements evaluate to True , the function will stop after the first element that evaluates to False . It turns out that None is falsy when you try to use it in a Boolean context:
Therefore, it will stop right after the first call to the print() function. Because you’re using a generator expression, which evaluates lazily, the subsequent calls to print() won’t be made. However, if you replaced the generator expression with a list, then you’d see all five invocations:
abhinav on Jan. 7, 2021
If I understand correctly, calling print() returns None which evaluates to False and that’s why the generator expression stops after the first one.
Thanks for the great explanation. btw I didn’t know there was a difference between statements and expressions, thanks for that, will read more. 🙂

Bartosz Zaczyński RP Team on Jan. 7, 2021
@abhinav Precisely, the print() function implicitly returns None , which is true for any function that doesn’t use the return keyword.
Python String Module

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.
Python String module contains some constants, utility function, and classes for string manipulation.
Python String Module
It’s a built-in module and we have to import it before using any of its constants and classes.
String Module Constants
Let’s look at the constants defined in the string module.

string capwords() function
Python string module contains a single utility function — capwords(s, sep=None). This function split the specified string into words using str.split(). Then it capitalizes each word using str.capitalize() function. Finally, it joins the capitalized words using str.join(). If the optional argument sep is not provided or None, then leading and trailing whitespaces are removed and words are separated with single whitespace. If it’s provided then the separator is used to split and join the words.
Output: Welcome To Journaldev 
Python String Module Classes
Python string module contains two classes — Formatter and Template.
Formatter
It behaves exactly same as str.format() function. This class become useful if you want to subclass it and define your own format string syntax. Let’s look at a simple example of using Formatter class.

Template
This class is used to create a string template for simpler string substitutions as described in PEP 292. It’s useful in implementing internationalization (i18n) in an application where we don’t need complex formatting rules.
Output: Pankaj is the Founder of JournalDev. 
You can checkout complete python script and more Python examples from our GitHub Repository.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
7. Строки¶
К этому момент мы уже встречали пять типов данных: int , float , bool , NoneType и str . Тип str — строка — качественно отличается от четырех других тем, что состоит из меньших элементов — символов.
Типы, включающие меньшие элементы, называются составными типами данных. В разных ситуациях можно либо обращаться с составным типом данных как с чем-то цельным, либо работать с его отдельными частями. Эта двоякость полезна.
Оператор [] выбирает единственный символ из строки:
Выражение fruit[1] выбирает символ номер 1 из строки fruit . Результат присваивается переменной letter . Отобразив letter , вы, вероятно, удивитесь:
Ведь первая буква в строке "banana" не a ! Но программисты часто ведут счет, начиная с 0. Буква номер 0 в строке "banana" — буква b . Буква номер 1 — a , номер 2 — n , и так далее.
Если вам нужна буква номер 0, просто поместите 0, или любое выражение, дающее 0, в квадратные скобки:
Выражение в скобках называется индекс. Индекс указывает на элемент упорядоченного набора, в данном случае, набора символов строки. Индекс может быть произвольным целочисленным выражением.
7.2. Длина¶
Функция len (англ.: длина) возвращает количество символов в строке:
Возможно, для получения последнего символа в строке вы захотите сделать так:
Это не работает! Вы получите ошибку выполнения IndexError: string index out of range . Причина в том, что в строке "banana" нет символа с индексом 6. Так как мы начинаем счет с 0, шесть символов пронумерованы от 0 до 5. Для того, чтобы получить последний символ, нужно из length вычесть 1:
Кроме того, можно использовать отрицательные индексы, которые позволяют вести счет от конца строки. Выражение fruit[-1] дает последний символ строки, fruit[-2] дает второй символ от конца строки, и так далее.
7.3. Обход и цикл for ¶
Часто программе требуется обрабатывать строку по одному символу за раз. Начав с начала строки, программа выбирает очередной символ и что-то с ним делает, и так до тех пор, пока строка не закончится. Такой прием обработки называется обходом. Вот как можно запрограммировать обход с помощью предложения while :
Этот цикл обходит строку и выводит каждую букву в отдельной строке. Условие цикла здесь index < len(fruit) , так что, когда index становится равным длине строки, условие становится ложным и тело цикла больше не выполняется. Последний обработанный символ имеет индекс len(fruit)-1 , и является последним символом в строке.
Обход элементов последовательности настолько часто используется, что Python предлагает для этого другой, более простой синтаксис — цикл for :
В каждой итерации переменной char присваивается очередной символ строки. Цикл продолжается до тех пор, пока строка не закончится.
Следующий пример показывает, как с помощью конкатенации и цикла for сгенерировать последовательность в алфавитном порядке. Например, Роберт МакКлоски в своей книге дал такие имена утятам: Jack, Kack, Lack, Mack, Nack, Ouack, Pack и Quack. Следующий цикл выводит имена утят в алфавитном порядке:
Эта программа выводит:
Конечно, это не совсем то, что нужно, поскольку Ouack и Quack написаны неправильно. Вам предстоит исправить это в одном из упражнений к этой главе.
7.4. Срезы строк¶
Подстроку строки будем называть срезом. Получение среза строки похоже на получение одного символа:
Оператор [n:m] возвращает часть строки, начиная с символа с индексом n по символ с индексом m , включая первый, но исключая последний. Это поведение может показаться странным на первый взгляд; но представьте, что индексы указывают на места между символами, как на следующей диаграмме:

Если в операторе среза опустить первый индекс (перед двоеточием), то началом среза будет начало строки (индекс 0). Если опустить второй индекс, то срез включит все символы до конца строки. Таким образом:
А как вы думаете, что дает срез s[:] ?
7.5. Сравнение строк¶
Операторы сравнения работают со строками. Вот как можно узнать, равны ли две строки:
С помощью других операторов сравнения можно располагать слова в алфавитном порядке:
Знайте, однако, что Python обращается с большими и маленькими буквами не так, как это делают люди. Все большие буквы (буквы верхнего регистра) предшествуют всем маленьким буквам (буквам нижнего регистра). В результате:
Стандартное решение этой задачи — преобразовать строки к единому виду, например, в нижний регистр, и только потом сравнивать. (А вот заставить программу понимать, что зебры — не фрукты, является более сложной задачей.)
7.6. Строки неизменяемы¶
Возможно, вы захотите изменить символ в строке, используя оператор [] в левой части предложения присваивания. Например:
Вместо вывода Jello, world! этот код выдаст сообщение об ошибке выполнения TypeError: 'str' object doesn't support item assignment .
Строки в Python неизменяемы. Это значит, вы не можете изменить существующую строку. Если вам необходимо изменить существующую строку, то придется создать новую строку на основе имеющейся:
Здесь конкатенируются первая буква и срез строки greeting . Это никак не влияет на первоначальную строку.
7.7. Оператор in ¶
Оператор in проверяет, является ли одна строка частью другой строки (ее подстрокой):
Заметьте, что строка является подстрокой самой себя:
Комбинируя оператор in с конкатенацией строк, напишем функцию, удаляющую из строки все гласные:
Напишите доктесты для этой функции, чтобы убедиться, что она работает как задумано.
7.8. Функция find ¶
Что делает следующая функция?
В некотором смысле, find является противоположностью оператора [] . Вместо того, чтобы по индексу извлекать символ, эта функция по символу находит индекс, под которым этот символ присутствует в строке. Если символ не найден, функция возвращает -1 .
Это первый случай, когда мы видим предложение return в теле цикла. Если strng[index] == ch , функция немедленно возвращает значение и завершается, прекращая выполнение цикла.
Если искомого символа в строке нет, то цикл завершится, как обычно, после чего программа завершится, возвращая -1 .
Этот прием иногда называют эврика-обходом. Ведь как только мы нашли то, что ищем, мы можем закричать “Эврика!”, и больше не искать.
7.9. Счетчик в цикле¶
Следующая программа подсчитывает, сколько раз в строке встречается буква a . Это еще один пример использования приема счетчик, с которым мы познакомились в главе 6:
7.10. Необязательные параметры¶
Для того, чтобы найти в строке второе или третье вхождение некоторого символа, можно изменить функцию find , добавив третий параметр для указания позиции начала поиска:
Вызов find2('banana', 'a', 2) теперь возвращает 3 , позицию первого вхождения ‘a’ в строке ‘banana’ после позиции 2. А что вернет вызов find2('banana', 'n', 3) ? Если вы ответили 4, значит, вы поняли, как работает find2 .
Но можно пойти дальше, и объединить find и find2 с помощью необязательного параметра:
Вызов find('banana', 'a', 2) теперь ведет себя так же, как find2 , и, в то же время, при вызове find('banana', 'a') параметр start получит значение по умолчанию 0 .
Добавив еще один необязательный параметр к find , получим возможность искать как в прямом направлении, так и в обратном:
Передав значение -1 для step , мы заставим функцию искать от конца к началу. Обратите внимание, что в условии цикла теперь нужно поверять достижение index как нижней, так и верхней границы строки.
7.11. Модуль string ¶
Модуль string содержит полезные функции для работы со строками. Как обычно, для того, чтобы использовать модуль, мы должны его импортировать:
Чтобы посмотреть, что содержится в модуле, воспользуйтесь функцией dir с именем модуля в качестве аргумента.
Вы получите список элементов модуля string :
['Template', '_TemplateMetaclass', '__builtins__', '__doc__', '__file__', '__name__', '_float', '_idmap', '_idmapL', '_int', '_long', '_multimap', '_re', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'atof', 'atof_error', 'atoi', 'atoi_error', 'atol', 'atol_error', 'capitalize', 'capwords', 'center', 'count', 'digits', 'expandtabs', 'find', 'hexdigits', 'index', 'index_error', 'join', 'joinfields', 'letters', 'ljust', 'lower', 'lowercase', 'lstrip', 'maketrans', 'octdigits', 'printable', 'punctuation', 'replace', 'rfind', 'rindex', 'rjust', 'rsplit', 'rstrip', 'split', 'splitfields', 'strip', 'swapcase', 'translate', 'upper', 'uppercase', 'whitespace', 'zfill']
Чтобы побольше узнать о любом из элементов списка, можно воспользоваться функцией type . Укажите имя модуля и имя элемента, используя точечную нотацию.
Поскольку string.digits (англ.: цифры) является строкой, мы можем вывести ее и посмотреть, что она содержит:
Как и следовало ожидать, она содержит все десятичные цифры.
Функция string.find делает, в основном, то же самое, что и функция, которую мы написали. Чтобы узнать о ней больше, мы можем вывести ее документирующую строку __doc__ , которая содержит документацию по этой функции:
Параметры, указанные в документации в квадратных скобках, являются необязательными. Заметьте, что функцию string.find можно использовать почти так же, как нашу собственную find :
Этот пример демонстрирует одно из преимуществ модулей: они помогают избежать конфликта между именами встроенных функций и функций, определенных пользователем. Используя точечную нотацию, мы можем указать, какая именно функция find нам нужна.
На самом деле, string.find является функцией более общего применения, чем наша. Она может искать подстроки, а не только отдельные символы:
Как и наша функция, она принимает дополнительный аргумент, задающий индекс для начала поиска:
Однако, в отличие от нашей функции, ее второй необязательный параметр задает индекс для завершения поиска:
В этом примере поиск не удался, поскольку буква b не встречается между индексами 1 и 2 (последний исключается).
7.12. Классификация символов¶
Часто бывает нужно исследовать символ и выяснить, например, к какому регистру он принадлежит, является он буквой или цифрой. Модуль string предоставляет несколько констант, которые полезны для этих целей. С одной из них, string.digits , мы уже встречались.
Строка string.lowercase содержит все латинские символы, которые система относит к нижнему регистру. Аналогично, string.uppercase содержит все латинские символы верхнего регистра. Выполните следующее и посмотрите, что вы получите:
С помощью этих констант и функции find можно классифицировать символы. Например, если find(lowercase, ch) возвращает число, отличное от -1 , значит, ch является символом нижнего регистра:
Как вариант, можно воспользоваться оператором in :
Той же цели можно достичь с помощью операторов сравнения:
Если ch больше или равен a и меньше или равен z, то он является символом нижнего регистра.
Еще одна константа, определенная в модуле string , может удивить вас, если вывести ее на экран:
Пробельные символы перемещают курсор, ничего не отображая. Они создают пустое пространство между видимыми символами. Константа string.whitespace содержит все пробельные символы, включая пробел, табуляцию ( \t ) и перевод строки ( \n ).
В модуле string содержится много других полезных функций. Но эта книга — не справочник. Если вам нужно больше узнать о возможностях модулей Python, обратитесь к справочнику Python Library Reference. Так же, как и другая документация, справочник по библиотеке Python доступен на сайте Python http://www.python.org.
7.13. Форматирование строк¶
Наиболее выразительный и мощный способ форматирования строк в Python — использование оператора форматирования строки % вместе с операндами для форматирования. Чтобы посмотреть, как это работает, начнем с нескольких примеров:
Операция форматирования строки записывается так:
Левый операнд формат — строка, содержащая, помимо прочего, спецификации преобразования, которые начинаются с символа % . Справа от оператора форматирования % записывается в скобках последовательность значений, разделенных запятыми. Каждое значение в этой последовательности соответствует спецификации преобразования в форматируемой строке слева от оператора % . Скобки необязательны, если последовательность включает только одно значение.
В первом из приведенных выше примеров только одна спецификация преобразования, %s , обозначающая строку. Ей соответствует единственное значение "Arthur" , не заключенное в скобки.
Во втором примере имеются переменные name со строковым значением "Alice" и age с целочисленным значением 10 . Они соответствуют двум спецификациям преобразования, %s и %d . Во второй спецификации d обозначает десятичное целое число.
В третьем примере переменные n1 и n2 имеют целочисленные значения 4 и 5 , соответственно. В форматируемой строке имеются четыре спецификации преобразования: три %d и одна %f . Спецификация преобразования %f показывает, что соответствующее значение должно быть представлено как число с плавающей точкой. Четыре значения, соответствующие четырем спецификациям преобразования, следующие: 2**10 , n1 , n2 , and n1 * n2 .
В этой книге нам будет достаточно форматных преобразований s , d и f . Полный их список можно найти в справочнике по библиотеке Python в разделе String Formatting Operations.
Следующий пример демонстрирует реальную пользу от форматирования строк:
Программа печатает таблицу степеней чисел от 1 до 10. В этом варианте программы для выравнивания столбцов значений используется символ табуляции ( \t ). Это перестает работать, как только число в столбце становится достаточно длинным и достигает следующей позиции табуляции:
Также обратите внимание на то, что первый столбец получается намного шире, чем требуется. Лучшим решением в данном случае было бы независимо устанавливать ширину каждого столбца. Форматирование строк предоставляет такую возможность:
Эта версия программы выводит следующее:
Знак - после % в спецификации преобразования обозначает выравнивание по левому краю, а число обозначает минимальную длину. Так, %-13d обозначает десятичное число длиной не менее 13 символов, выровненное по левому краю.
7.14. Глоссарий¶
7.15. Упражнения¶
Измените следующий код:
так, чтобы Ouack и Quack выводились корректно.
Оформите следующий код как функцию с именем count_letters :
Обобщите эту функцию, чтобы она принимала строку и символ в качестве аргументов.
Теперь перепишите функцию count_letters так, чтобы вместо обхода строки она многократно вызывала find (версия из раздела 7.10), с третьим параметром, для того, чтобы найти новые вхождения нужной буквы.
Как вы думаете, какая из версий is_lower будет самой быстрой? Можете ли назвать другие причины, кроме скорости, чтобы предпочесть одну версию другой?
Создайте файл с именем stringtools.py и поместите в него следующее:
Напишите тело функции reverse (англ.: перевернуть) так, чтобы доктесты успешно прошли.
Напишите функцию mirror (англ.: зеркало, отражать) в файле stringtools.py .
Напишите тело функции так, чтобы доктесты успешно прошли.
Добавьте функцию remove_letter (англ.: удалить букву) в файл stringtools.py .
Напишите тело функции так, чтобы доктесты успешно прошли.
Напишите тела следующих функций, по одной за раз, убеждаясь, что доктесты успешно проходят:
Попробуйте выполнить каждую из следующих операций форматирования строки в интерактивном режиме Python и объясните результаты:
- "%s %d %f" % (5, 5, 5)
- "%-.2f" % 3
- "%-10.2f%-10.2f" % (7, 1.0/2)
- print " $%5.2f\n $%5.2f\n $%5.2f" % (3, 4.5, 11.2)
Форматируемые строки в следующих операциях содержат ошибки. Исправьте их:
PyMOTW
If you find this information useful, consider picking up a copy of my book, The Python Standard Library By Example.
Page Contents
Navigation
This Page
Examples
The output from all the example programs from PyMOTW has been generated with Python 2.7.8, unless otherwise noted. Some of the features described here may not be available in earlier versions of Python.
If you are looking for examples that work under Python 3, please refer to the PyMOTW-3 section of the site.
Navigation
- index
- modules |
- next |
- previous | » »
string – Working with text¶
| Purpose: | Contains constants and classes for working with text. |
|---|---|
| Available In: | 2.5 |
The string module dates from the earliest versions of Python. In version 2.0, many of the functions previously implemented only in the module were moved to methods of str and unicode objects. Legacy versions of those functions are still available, but their use is deprecated and they will be dropped in Python 3.0. The string module still contains several useful constants and classes for working with string and unicode objects, and this discussion will concentrate on them.
Constants¶
The constants in the string module can be used to specify categories of characters such as ascii_letters and digits . Some of the constants, such as lowercase , are locale-dependent so the value changes to reflect the language settings of the user. Others, such as hexdigits , do not change when the locale changes.
Most of the names for the constants are self-explanatory.
Functions¶
There are two functions not moving from the string module. capwords() capitalizes all of the words in a string.
The results are the same as if you called split() , capitalized the words in the resulting list, then called join() to combine the results.
The other function creates translation tables that can be used with the translate() method to change one set of characters to another.
In this example, some letters are replaced by their l33t number alternatives.
Templates¶
String templates were added in Python 2.4 as part of PEP 292 and are intended as an alternative to the built-in interpolation syntax. With string.Template interpolation, variables are identified by name prefixed with $ (e.g., $var ) or, if necessary to set them off from surrounding text, they can also be wrapped with curly braces (e.g., $ ).
This example compares a simple template with a similar string interpolation setup.
As you see, in both cases the trigger character ( $ or % ) is escaped by repeating it twice.
One key difference between templates and standard string interpolation is that the type of the arguments is not taken into account. The values are converted to strings, and the strings are inserted into the result. No formatting options are available. For example, there is no way to control the number of digits used to represent a floating point value.
A benefit, though, is that by using the safe_substitute() method, it is possible to avoid exceptions if not all of the values needed by the template are provided as arguments.
Since there is no value for missing in the values dictionary, a KeyError is raised by substitute() . Instead of raising the error, safe_substitute() catches it and leaves the variable expression alone in the text.
Advanced Templates¶
If the default syntax for string.Template is not to your liking, you can change the behavior by adjusting the regular expression patterns it uses to find the variable names in the template body. A simple way to do that is to change the delimiter and idpattern class attributes.
In this example, variable ids must include an underscore somewhere in the middle, so %notunderscored is not replaced by anything.
For more complex changes, you can override the pattern attribute and define an entirely new regular expression. The pattern provided must contain four named groups for capturing the escaped delimiter, the named variable, a braced version of the variable name, and invalid delimiter patterns.
Let’s look at the default pattern:
Since t.pattern is a compiled regular expression, we have to access its pattern attribute to see the actual string.
If we wanted to create a new type of template using, for example, <> as the variable syntax, we could use a pattern like this:
We still have to provide both the named and braced patterns, even though they are the same. Here’s the output:
Deprecated Functions¶
For information on the deprecated functions moved to the string and unicode classes, refer to String Methods in the manual.
string Standard library documentation for this module. PEP 292 Simpler String Substitutions
Navigation
- index
- modules |
- next |
- previous | » »
© Copyright Doug Hellmann. | alt="Creative Commons License" width="80" height="15" /> | Last updated on Jul 11, 2020. | Created using Sphinx. | Design based on "Leaves" by SmallPark |