Для представления текстов в Python используются строки (class str). Здесь нет типа для представления символов (такого как тип char в Си языках). Строки длины 1 представляют символы алфавита, используемого при создании текстов.
Строка символов рассматривается как индексируемая последовательность символов. Если S - строка символов, то S[i] - это i-й символ строки. Индексация начинается с нуля. У строки S длины n индексы символов принимают значения от 0 до n - 1 включительно.
Строки относятся к неизменяемым типам данных. Символ S[i] можно прочитать, но нельзя изменить его значение. Все методы класса str, изменяющие значение строки, являются функциями, которые создают новую строку, возвращаемую в качестве результата.
Неизменяемость и индексируемость - типичные свойства строк, характерные для многих языков программирования, в частности для языка С и его потомков - С++, C#, Java.
Любой текст, взятый в кавычки, является строковой константой. Новинкой является то, что можно использовать как одинарные, так и двойные кавычки. Это позволяет использовать одинарные кавычки внутри двойных и наоборот, внутри одинарных кавычек использовать двойные кавычки. Для многострочных констант используются тройные кавычки.
Примеры:
#Работа с текстом - классом str
def test1():
# Работа со строками. Строковые константы
s1 = "Типичная константа!"
s2 ="It's me: " + 'Rockwell Kent "Grenlandia"'
s3 = """ Первый,
второй,
третий. """
print(s1, '...', s2, '...', s3)
test1()
Результаты:
В константах можно использовать последовательности, начинающиеся слешем, задающие коды символов и непечатаемые символы, такие как, например, \n - переход на новую строку. Константу можно предварить символом r, что позволяет воспринимать все символы константы как оригинальные.
Примеры:
def test2():
s1 = "\076\077\n\x76\x77"
s2 = r"\076\077\n\x76\x77"
print (s1, '...', s2);
test2()
Результаты:
Над строками определены лишь две операции, задаваемые знаками + и *. Первая из этих операций (сложение) определена над строковыми операндами, результатом операции является строка, представляющая конкатенацию (сцепление) строк. Вторая операция (умножение) определена над строковым операндом и целым числом n. Результатом операции является строка, представляющая n-кратное повторение исходной строки.
Над строками также определены операции сравнения: >, <, >=, <=, ==, !=.
Результат этих операций принадлежит логическому типу bool.
Заметьте, алфавит языка, используемого при записи текстов, упорядочен в соответствии с целочисленными кодами символов. Если код символа S больше кода символа P, то S > P. Кодирование национальных алфавитов предполагает плотное кодирование. Это означает, что код буквы 'б' в кириллице на единицу больше кода буквы 'а', так что, зная код буквы 'а', можно определить код любой буквы из алфавита кириллицы. Порядок на алфавите порождает лексикографический порядок на словах (строках). В соответствии с этим порядком упорядочены слова в словарях.
Пример:
def test3():
# Операции и порядок
s1 = "рок"; s2 = "око"; s3 = s1 + s2
s4 = "ко"; s5 = s4 * 3
print (s3, '...', s5)
if s1 > s2 and s5 > s4:
print("Лексикографическое упорядочение")
else:
print("Порядка нет!")
test3()
Результаты:
Конечно, операций сложения и умножения, определенных на строках, явно недостаточно для содержательной работы с текстом. При работе с текстом нужно уметь работать с его частями - подстроками строки текста. Нужно уметь определять входит ли некоторая подстрока в строку, определять ее местонахождение в строке, выделить, удалить, вставить подстроку, заменить вхождение подстроки другой строкой. Это набор базисных операций. Реально набор операций, допускаемых при работе со строками в каждом языке программирования, встроенных в язык или доступных в сопровождающих библиотеках, весьма широк.
В этом разделе познакомимся с возможностями языка Python по получению подстрок. Подстроку можно получить, используя механизм, называемый срезом. Простейший срез можно получить, если необходимо получить подстроку длины 1 - единичный символ. Для получения такой подстроки из строки S достаточно знать индекс символа. Простейший вид среза строки S - это S[i] . Для получения подстроки, для которой известны начальный и конечный символы, используется срез S[i : k]. Для первого индекса используется правило "включительно", для второго - "исключительно". Для строки S длины n подстрока S[0 : n] совпадает с самой строкой S. Первый или второй индексы можно опускать. Срез S[ : k] соответствует начальной подстроке длины k. Срез S[k :] соответствует конечной подстроке с начальным индексом k.
Добавив в срез еще один параметр, можно расширить возможности извлечения подстрок. В срезе S[i : k : h] формируется подстрока из символов, начиная с i включительно, до k исключительно, с шагом h. Если шаг h отрицательный, то формирование идет реверсивно, в обратном порядке.
Пример:
def test4():
# Срезы и подстроки
s1 = "рококо"; s2 = "ропот"
s3 = s1[1:4]; s4 = s1[:3]; s5 = s1[3:]; s6 = s1[1::2]; s7 = s2[4::-1]
print(s3, '...', s4, '...', s5, '...', s6, '...', s7)
test4()
Результаты:
Как говорилось выше, к базисным операциям относятся операции поиска вхождения подстроки, удаление, вставка, замена подстрок. Посмотрим, как эти операции реализуются в Python. Для поиска как первого вхождения подстроки, так и последующих вхождений применяется функция find, которая при нахождении вхождения возвращает индекс вхождения, когда же вхождения не найдено, то возвращается отрицательное значение -1.
В Python нет традиционных операций вставки (Insert) и удаления (Remove), но эти операции легко реализовать, используя срезы. Функция replace позволяет заменить все вхождения одной подстроки другой подстрокой.
Пример:
def test5():
# Базисные операции над строками
# Поиск вхождения подстроки
s = "рококо"
first = s.find('око'); second = s.find('око', first + 1)
third = s.find('око', second + 1)
print(first, second, third)
# вставка подстроки в позицию i - используем срезы
i = 3
s = s[:i] + "_за_" + s[i:]
print(s)
# удаление подстроки длины n, начиная с позиции i - используем срезы
n = 4
s = s[:i] + s[i+n:]
print(s)
# замена всех вхождений подстроки u на подстроку v
u = 'о'; v = 'и'
s = s.replace(u, v)
print(s)
test5()
Результаты:
При работе с текстом часто возникает задача разделения текста на фрагменты, например, разбить исходный текст на предложения, предложения на слова. Возникает и обратная задача - сборки текста из фрагментов.
Метод split позволяет в ряде случаев достаточно просто решить задачу разбора текстов в предположении, что фрагменты, которые требуется выделить разделяются в тексте некоторыми специальными символами - разделителями, например, пробелами, запятыми, точками. Результатом работы метода split является список, каждый элемент которого является строкой, содержащей фрагмент исходного текста. Если разделителем является пробел, то его можно не указывать, по умолчанию в качестве разделителя используется любая строка из белых пробелов.
Метод join решает обратную задачу - он создает единый текст - строку из фрагментов, заданных списком, вставляя заданный разделитель при сборке результирующей строки из строк списка.
Рассмотрим пример использования функций разбора и сборки строки - join и split - на примере разбора предложения на слова и последующей обратной сборки предложения. Заметьте, это полезно, когда слова в исходном тексте разделяются не одним, а несколькими пробелами, что противоречит принятым правилам записи литературного текста.
def test6():
# join and split
statement = "Мама мыла Машу мылом"
words = statement.split()
print(words, type(words))
new_statement = ' '.join(words)
print(statement)
print(new_statement)
test6()
Результаты:
При расщеплении строки создается список строк. Метод сборки join является строковым методом, вызываемым строкой, представляющей разделитель.
Зачастую, результирующая строка, собираемая из фрагментов, должна соответствовать некоторому формату. Для форматирования строк применяются два различных по синтаксису, но подобных по сути способа, когда строка, содержащая шаблоны форматов, изменяется в результате замены шаблонов конкретными значениями.
В первом способе строка синтаксически рассматривается как бинарное выражение. В качестве операции форматирования используется символ процента %. Левым аргументом является строка, содержащая в произвольных местах k шаблонов форматов, каждый из которых также начинается символом процента. Правым аргументом выражения является список из k строк. В результате выполнения операции форматирования создается новая строка, полученная заменой шаблона элементом списка, отформатированным в соответствии с шаблоном. По духу и синтаксису этот способ близок к форматированию данных функцией printf языка C.
Второй способ синтаксически ближе к методу Format, определенному в Framework Dot Net и используемому при форматировании строк в языке C#.Здесь шаблоны форматов заключаются в фигурные скобки и первый аргумент шаблона задает номер элемента списка, содержащего данные, подлежащие форматированию и замещающие шаблоны. Синтаксически форматирование происходит при вызове метода format. Поясним применение этих способов на примере:
def test7():
# Форматирование строк
fio = "Фамилия: %s ID: %d Сумма: %f" % ("Петров", 1238, 28435.78)
print (fio)
template = "Фамилия: {0} ID: {1} Сумма: {2}"
fio = template.format("Петров", 1238, 28435.78)
print (fio)
test7()
Результаты:
Среди многочисленных функций Python, предназначенных для работы с текстом, есть группа is методов, имена которых начинаются префиксом is и позволяющих проверить, обладает ли текст заданным свойством. Например, метод isidentifier возвращает значение true, если текст является идентификатором - последовательностью букв и цифр, начинающуюся с буквы. Другие методы: isalpha, isdigit, isalnum проверяют, являются ли символы текста буквами, цифрами, буквами или цифрами. Методов этой группы достаточно много, и они существенно упрощают анализ текста. Для демонстрации работы этих методов я написал собственную функцию IsName, являющуюся аналогом стандартного метода isidentifier.
Пример:
def IsName(text):
# является ли текст идентификатором?
if not text[0].isalpha():
return False
s = text[1:]
return s.isalnum()
def test8():
# Проверка свойств
s1 = "Agent008"
if IsName(s1):
print (s1 + " Это правильный идентификатор!")
else:
print (s1 + " Это не идентификатор!")
s2 = "Agent 008"
if IsName(s2):
print (s2 + " Это правильный идентификатор!")
else:
print (s2 + " Это не идентификатор!")
test8()
Результаты:
Мы продемонстрировали основные возможности работы с текстами, хотя, конечно, рассмотрены далеко не все функции Python, позволяющие работать с текстами. В заключение этого раздела упомяну лишь наиболее часто используемую стандартную функцию len(s) и метод s.count, позволяющие узнать длину строки s. Также широко используется стандартная функция str(x), преобразующая объект x в строку.
Для представления текстов в Python используются строки (class str). Здесь нет типа для представления символов (такого как тип char в Си языках). Строки длины 1 представляют символы алфавита, используемого при создании текстов.
Строка символов рассматривается как индексируемая последовательность символов. Если S - строка символов, то S[i] - это i-й символ строки. Индексация начинается с нуля. У строки S длины n индексы символов принимают значения от 0 до n - 1 включительно.
Строки относятся к неизменяемым типам данных. Символ S[i] можно прочитать, но нельзя изменить его значение. Все методы класса str, изменяющие значение строки, являются функциями, которые создают новую строку, возвращаемую в качестве результата.
Неизменяемость и индексируемость - типичные свойства строк, характерные для многих языков программирования, в частности для языка С и его потомков - С++, C#, Java.
Любой текст, взятый в кавычки, является строковой константой. Новинкой является то, что можно использовать как одинарные, так и двойные кавычки. Это позволяет использовать одинарные кавычки внутри двойных и наоборот, внутри одинарных кавычек использовать двойные кавычки. Для многострочных констант используются тройные кавычки.
Примеры:
#Работа с текстом - классом str
def test1():
# Работа со строками. Строковые константы
s1 = "Типичная константа!"
s2 ="It's me: " + 'Rockwell Kent "Grenlandia"'
s3 = """ Первый,
второй,
третий. """
print(s1, '...', s2, '...', s3)
test1()
Результаты:
В константах можно использовать последовательности, начинающиеся слешем, задающие коды символов и непечатаемые символы, такие как, например, \n - переход на новую строку. Константу можно предварить символом r, что позволяет воспринимать все символы константы как оригинальные.
Примеры:
def test2():
s1 = "\076\077\n\x76\x77"
s2 = r"\076\077\n\x76\x77"
print (s1, '...', s2);
test2()
Результаты:
Над строками определены лишь две операции, задаваемые знаками + и *. Первая из этих операций (сложение) определена над строковыми операндами, результатом операции является строка, представляющая конкатенацию (сцепление) строк. Вторая операция (умножение) определена над строковым операндом и целым числом n. Результатом операции является строка, представляющая n-кратное повторение исходной строки.
Над строками также определены операции сравнения: >, <, >=, <=, ==, !=.
Результат этих операций принадлежит логическому типу bool.
Заметьте, алфавит языка, используемого при записи текстов, упорядочен в соответствии с целочисленными кодами символов. Если код символа S больше кода символа P, то S > P. Кодирование национальных алфавитов предполагает плотное кодирование. Это означает, что код буквы 'б' в кириллице на единицу больше кода буквы 'а', так что, зная код буквы 'а', можно определить код любой буквы из алфавита кириллицы. Порядок на алфавите порождает лексикографический порядок на словах (строках). В соответствии с этим порядком упорядочены слова в словарях.
Пример:
def test3():
# Операции и порядок
s1 = "рок"; s2 = "око"; s3 = s1 + s2
s4 = "ко"; s5 = s4 * 3
print (s3, '...', s5)
if s1 > s2 and s5 > s4:
print("Лексикографическое упорядочение")
else:
print("Порядка нет!")
test3()
Результаты:
Конечно, операций сложения и умножения, определенных на строках, явно недостаточно для содержательной работы с текстом. При работе с текстом нужно уметь работать с его частями - подстроками строки текста. Нужно уметь определять входит ли некоторая подстрока в строку, определять ее местонахождение в строке, выделить, удалить, вставить подстроку, заменить вхождение подстроки другой строкой. Это набор базисных операций. Реально набор операций, допускаемых при работе со строками в каждом языке программирования, встроенных в язык или доступных в сопровождающих библиотеках, весьма широк.
В этом разделе познакомимся с возможностями языка Python по получению подстрок. Подстроку можно получить, используя механизм, называемый срезом. Простейший срез можно получить, если необходимо получить подстроку длины 1 - единичный символ. Для получения такой подстроки из строки S достаточно знать индекс символа. Простейший вид среза строки S - это S[i] . Для получения подстроки, для которой известны начальный и конечный символы, используется срез S[i : k]. Для первого индекса используется правило "включительно", для второго - "исключительно". Для строки S длины n подстрока S[0 : n] совпадает с самой строкой S. Первый или второй индексы можно опускать. Срез S[ : k] соответствует начальной подстроке длины k. Срез S[k :] соответствует конечной подстроке с начальным индексом k.
Добавив в срез еще один параметр, можно расширить возможности извлечения подстрок. В срезе S[i : k : h] формируется подстрока из символов, начиная с i включительно, до k исключительно, с шагом h. Если шаг h отрицательный, то формирование идет реверсивно, в обратном порядке.
Пример:
def test4():
# Срезы и подстроки
s1 = "рококо"; s2 = "ропот"
s3 = s1[1:4]; s4 = s1[:3]; s5 = s1[3:]; s6 = s1[1::2]; s7 = s2[4::-1]
print(s3, '...', s4, '...', s5, '...', s6, '...', s7)
test4()
Результаты:
Как говорилось выше, к базисным операциям относятся операции поиска вхождения подстроки, удаление, вставка, замена подстрок. Посмотрим, как эти операции реализуются в Python. Для поиска как первого вхождения подстроки, так и последующих вхождений применяется функция find, которая при нахождении вхождения возвращает индекс вхождения, когда же вхождения не найдено, то возвращается отрицательное значение -1.
В Python нет традиционных операций вставки (Insert) и удаления (Remove), но эти операции легко реализовать, используя срезы. Функция replace позволяет заменить все вхождения одной подстроки другой подстрокой.
Пример:
def test5():
# Базисные операции над строками
# Поиск вхождения подстроки
s = "рококо"
first = s.find('око'); second = s.find('око', first + 1)
third = s.find('око', second + 1)
print(first, second, third)
# вставка подстроки в позицию i - используем срезы
i = 3
s = s[:i] + "_за_" + s[i:]
print(s)
# удаление подстроки длины n, начиная с позиции i - используем срезы
n = 4
s = s[:i] + s[i+n:]
print(s)
# замена всех вхождений подстроки u на подстроку v
u = 'о'; v = 'и'
s = s.replace(u, v)
print(s)
test5()
Результаты:
При работе с текстом часто возникает задача разделения текста на фрагменты, например, разбить исходный текст на предложения, предложения на слова. Возникает и обратная задача - сборки текста из фрагментов.
Метод split позволяет в ряде случаев достаточно просто решить задачу разбора текстов в предположении, что фрагменты, которые требуется выделить разделяются в тексте некоторыми специальными символами - разделителями, например, пробелами, запятыми, точками. Результатом работы метода split является список, каждый элемент которого является строкой, содержащей фрагмент исходного текста. Если разделителем является пробел, то его можно не указывать, по умолчанию в качестве разделителя используется любая строка из белых пробелов.
Метод join решает обратную задачу - он создает единый текст - строку из фрагментов, заданных списком, вставляя заданный разделитель при сборке результирующей строки из строк списка.
Рассмотрим пример использования функций разбора и сборки строки - join и split - на примере разбора предложения на слова и последующей обратной сборки предложения. Заметьте, это полезно, когда слова в исходном тексте разделяются не одним, а несколькими пробелами, что противоречит принятым правилам записи литературного текста.
def test6():
# join and split
statement = "Мама мыла Машу мылом"
words = statement.split()
print(words, type(words))
new_statement = ' '.join(words)
print(statement)
print(new_statement)
test6()
Результаты:
При расщеплении строки создается список строк. Метод сборки join является строковым методом, вызываемым строкой, представляющей разделитель.
Зачастую, результирующая строка, собираемая из фрагментов, должна соответствовать некоторому формату. Для форматирования строк применяются два различных по синтаксису, но подобных по сути способа, когда строка, содержащая шаблоны форматов, изменяется в результате замены шаблонов конкретными значениями.
В первом способе строка синтаксически рассматривается как бинарное выражение. В качестве операции форматирования используется символ процента %. Левым аргументом является строка, содержащая в произвольных местах k шаблонов форматов, каждый из которых также начинается символом процента. Правым аргументом выражения является список из k строк. В результате выполнения операции форматирования создается новая строка, полученная заменой шаблона элементом списка, отформатированным в соответствии с шаблоном. По духу и синтаксису этот способ близок к форматированию данных функцией printf языка C.
Второй способ синтаксически ближе к методу Format, определенному в Framework Dot Net и используемому при форматировании строк в языке C#.Здесь шаблоны форматов заключаются в фигурные скобки и первый аргумент шаблона задает номер элемента списка, содержащего данные, подлежащие форматированию и замещающие шаблоны. Синтаксически форматирование происходит при вызове метода format. Поясним применение этих способов на примере:
def test7():
# Форматирование строк
fio = "Фамилия: %s ID: %d Сумма: %f" % ("Петров", 1238, 28435.78)
print (fio)
template = "Фамилия: {0} ID: {1} Сумма: {2}"
fio = template.format("Петров", 1238, 28435.78)
print (fio)
test7()
Результаты:
Среди многочисленных функций Python, предназначенных для работы с текстом, есть группа is методов, имена которых начинаются префиксом is и позволяющих проверить, обладает ли текст заданным свойством. Например, метод isidentifier возвращает значение true, если текст является идентификатором - последовательностью букв и цифр, начинающуюся с буквы. Другие методы: isalpha, isdigit, isalnum проверяют, являются ли символы текста буквами, цифрами, буквами или цифрами. Методов этой группы достаточно много, и они существенно упрощают анализ текста. Для демонстрации работы этих методов я написал собственную функцию IsName, являющуюся аналогом стандартного метода isidentifier.
Пример:
def IsName(text):
# является ли текст идентификатором?
if not text[0].isalpha():
return False
s = text[1:]
return s.isalnum()
def test8():
# Проверка свойств
s1 = "Agent008"
if IsName(s1):
print (s1 + " Это правильный идентификатор!")
else:
print (s1 + " Это не идентификатор!")
s2 = "Agent 008"
if IsName(s2):
print (s2 + " Это правильный идентификатор!")
else:
print (s2 + " Это не идентификатор!")
test8()
Результаты:
Мы продемонстрировали основные возможности работы с текстами, хотя, конечно, рассмотрены далеко не все функции Python, позволяющие работать с текстами. В заключение этого раздела упомяну лишь наиболее часто используемую стандартную функцию len(s) и метод s.count, позволяющие узнать длину строки s. Также широко используется стандартная функция str(x), преобразующая объект x в строку.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.