Технологии и методы программирования. Учебное пособие
.pdf2. РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ
Методы строк, индексы и срезы
Строка – это неизменяемая последовательность символов. Доступ к одному символу можно получить с помощью оператора квадратных скобок. Помимо функции len(), используемой в других структурах данных, используются методы, приведенные в табл. 11 (S – строка).
|
Таблица 11 |
|
Методы строк |
|
|
Метод |
Описание |
|
|
S1 + S2 |
Конкатенация (сложение строк) |
S1 * 3 |
Повторение строки |
S.count(str, |
Возвращает количество непересекающихся |
вхождений подстроки в диапазоне [начало, |
|
[start],[end]) |
конец] (0 и длина строки по умолчанию) |
S.upper() |
Преобразует строку к верхнему регистру |
S.isupper() |
Показывает, состоит ли строка из символов |
в верхнем регистре |
|
|
|
S.lower() |
Преобразует строку к нижнему регистру |
S.islower() |
Показывает, состоит ли строка из символов |
в нижнем регистре |
|
|
|
S.capitalize() |
Переводит первый символ строки в верхний |
регистр, а все остальные в нижний |
|
|
|
|
21 |
|
Окончание табл. 11 |
|
|
Метод |
Описание |
|
|
S.isdigit() |
Показывает, состоит ли строка из цифр |
S.isalpha() |
Показывает, состоит ли строка из букв |
S.isalnum() |
Показывает, состоит ли строка из цифр |
или букв |
|
S.find(str, |
Выполняет поиск подстроки в строке. Воз- |
[start],[end]) |
вращает номер первого вхождения или –1 |
S.split(символ) |
Выполняет разбиение строки по разделителю |
S.replace(шаблон, за- |
Заменяет шаблон на замену. Оператор |
мена[, maxcount]) |
maxcount ограничивает количество замен |
ord(символ) |
Преобразует символ в его код ASCII |
chr(число) |
Преобразует код ASCII в символ |
При вызове функций необходимо помнить, что строки в Python относятся к категории неизменяемых последовательностей, т. е. все функции могут лишь создавать новую строку. Поэтому все строковые функции возвращают новую строку, которую потом следует присвоить переменной.
Доступ к элементу при помощи квадратных скобок – это взятие по индексу. Пример: str[1] – берется второй элемент строки (нумерация с нуля). Поддерживаются также отрицательные индексы, при этом нумерация идет с конца, str[-1] подразумевает последний элемент строки.
В Python кроме индексов существуют еще и срезы.
Например, item[START:STOP:STEP] берет срез от номера START
до STOP (не включая его), с шагом STEP. По умолчанию START = 0, STOP равно длине объекта, STEP = 1. Соответственно какие-нибудь (а возможно, и все) параметры могут быть опущены. Например, str[::2] выдаст 1, 3, 5-й и так далее элементы строки.
Следует отметить, что срезы работают не только со строками, но и со списками и кортежами. Результатом применения выборки всегда становитсяновоезначениесоответствующего типа– списокиликортеж.
22
Работа с файлами
Прежде чем работать с файлом, его надо открыть. За это отвечает встроенная функция open:
f = open('text.txt', 'r')
У функции open важны три аргумента. Первый – это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент – это режим, в котором мы будем открывать файл. Возможные режимы указаны в табл. 12.
Режим
'r'
'w'
'x'
'a'
'b'
't'
'+'
Таблица 12
Режимы открытия файла
Обозначение Открытие на чтение (является значением по умолчанию)
Открытие на запись, содержимое файла удаляется. Если файла не существует, то создается новый
Открытие на запись. Если файла не существует, то возвращает ошибку
Открытие на дозапись, информация добавляется в конец файла
Открытие в двоичном режиме
Открытие в текстовом режиме (является значением по умолчанию)
Открытие на чтение и запись
Режимы могут быть объединены: например, 'rb' – чтение в двоичном режиме. По умолчанию режим равен 'rt'.
Наконец, аргумент encoding нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку.
Рассмотрим запись в файл. Откроем файл на запись: f = open('text.txt', 'w')
23
Запись в файл осуществляется с помощью метода write: f.write('Hello!')
При использовании данной конструкции файл изначально очищаетсяивнегозаписывается«Hello!». Длятогочтобыданныедобавлялись в файл, используется режим 'a' [1].
Первый способ чтения из файла – метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n). Пример:
f = open('text.txt') f.read(1)
В данном случае считывается первый элемент из файла. Можно также прочитать файл построчно, воспользовавшись циклом for:
f = open('text.txt') for line in f: print(line)
После окончания работы с файлом закрытие производится с помощью метода close:
f.close()
Варианты практического задания № 2
Составить программу согласно полученному варианту задания (табл. 13). Строковые данные получать из файла с расширением txt, результат обработки записывать в новый файл. Предусмотреть наличие разных языков (помимо английского) в исходном файле.
Таблица 13
|
Варианты для выполнения практического задания № 2 |
|
|
|
|
Вариант |
|
Задание |
|
|
|
1 |
|
Удалить из текста заданный символ |
|
|
|
2 |
|
В конце каждой строки вставить заданный символ |
|
|
|
24
|
Окончание табл. 13 |
|
|
|
|
Вариант |
Задание |
|
|
|
|
3 |
Заменить цифры на пробелы |
|
|
|
|
4 |
Заменить знаки на заданный символ |
|
|
|
|
5 |
Заменить каждый пробел на два |
|
|
|
|
6 |
После каждой точки вставить символ ‘\n’ |
|
7 |
Удалить из текста все пробелы |
|
|
|
|
8 |
Заменить заданные символы на пробелы |
|
|
|
|
9 |
После каждого пробела вставить точку |
|
|
|
|
10 |
Заменить все пробелы первым символом текста |
|
|
|
|
11 |
Во всех парах одинаковых символов второй символ заменить на |
|
пробел |
||
|
||
|
|
|
12 |
Заменить на пробелы все символы, совпадающие с первым симво- |
|
лом в строке |
||
|
||
|
|
|
13 |
Заменить заданную пару букв на символы #@ |
|
14 |
Заменить все цифры заданным символом |
|
|
|
|
15 |
Заменить на пробел все символы, совпадающие с последним сим- |
|
волом в строке |
||
|
||
|
|
|
16 |
Заменить все символы с кодами меньше 48 на пробелы |
|
|
|
|
17 |
Заменить все символы с кодами больше 48 на пробелы |
|
|
|
|
18 |
Заменить каждый третий символ на пробел |
|
|
|
|
19 |
Заменить все пробелы на заданный символ |
|
|
|
|
20 |
Заменить все пары одинаковых символов на пробелы |
|
|
|
25
Контрольные вопросы
1.Перечислите методы строк Python.
2.Расскажите, как получить элементы строки через индексы.
3.Расскажите, как получить элементы строки через срезы.
4.Опишите функцию открытия файла.
5.Перечислите режимы открытия файла.
6.Опишите функцию записи в файл.
7.Опишите функцию чтения из файла.
8.Как можно прочитать файл построчно?
9.Опишите функцию закрытия файла.
26
3. ОБЪЕКТО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
В контексте программирования функцией называется хранимая последовательность инструкций, предназначенная для решения определенной задачи. Основные параметры функции:
имя функции;
тело функции;
передаваемые параметры (аргументы);
возвращаемые параметры (результат).
Правила наименования функций такие же, как для переменных. Например, нельзя использовать зарезервированные слова в качестве имен функций. Имена функций и переменных не должны совпадать. Первая строка определения функции называется заголовком, оставшаяся часть – телом функции. Заголовок заканчивается двоеточием, тело функции имеет отступ. Тело функции может содержать любое количество инструкций. Инструкции внутри функции не получат управления, покафункциянебудетвызвана. Вызватьфункциюможно, обратившись к ней по имени.
Функция должна быть определена до ее вызова.
Функции (def, lambda)
Для определения функции в языке Python используется инструкция def. Нитипаргументов, нитипвозвращаемогозначениянеуказывается. Пример функции:
def test_func(): pass
27
Данная функция ничего не делает (pass – оператор-заглушка, равноценный отсутствию операции). Для вызова функции необходимо обратиться к ней: test_func().
Функция может принимать произвольное количество аргументов или не принимать их вовсе. Пример функции с параметрами:
def func(a, b): res = a + b
print ("Результат:", res)
После вызова функцим func(2,3) в терминал выводится значение 5.
Длявозврата результата функции используетсяинструкцияreturn. Пример функции и ее вызова:
def func(a, b): res = a + b return res
res = func(2,3) print(res)
Если функция не должна выполнять большой объем кода, то можно воспользоваться анонимной функцией. Анонимные функции (также известные как lambda-функции) могут содержать лишь одно выражение. Lambda-функции, в отличие от обычной, не требуется инструкция return. Пример:
func = lambda x, y: x + y print(func(5,2))
Основы объектно-ориентированного программирования. Классы и объекты
Объектно-ориентированноепрограммирование(ООП) – это пара-
дигмапрограммирования, вкоторой основнымиконцепциями являются понятия объектов и классов.
Класс – это тип, описывающий устройство объектов. Объект – экземпляр класса. Класс можно сравнить с чертежом, по которому создаются объекты.
28
Язык Python соответствует принципам объектно-ориентированного программирования. В Python всё является объектами – строки, списки, словари и др. Однако возможности ООП в Python этим не ограничены. Программист может написать свой тип данных (класс) и определить в нем свои методы. Это не является обязательным, можно пользоваться только встроенными объектами. Однако ООП полезно при долгосрочной разработке программы несколькими людьми, так как упрощает понимание кода [1].
Пример определения собственного класса:
class Human: name = None age = None
Теперь мы можем создать несколько экземпляров этого класса и добавить атрибуты name и age:
human1 = Human() human1.name = "Иван" human1.age = 20 human2 = Human()
human2.name = "Александр" human2.age = 21
Классу возможно задать собственные методы. Пример:
class Human: name = None age = None
def set_data(self, name, age): self.name = name
self.age = age
self – обязательный аргумент, содержащий в себе экземпляр класса, передающийся при вызове метода, поэтому этот аргумент долженприсутствоватьвовсехметодахкласса. Данныйметодиспользуется для установки атрибутов:
human1 = Human() human1.set_data("Иван", 20)
29
Конструкторы, переопределение методов
Конструкторы позволяют задать некие характеристики для объекта сразужеприегосоздании. Кпримеру, увасестьнесколькопеременных, которые точно должен иметь объект. Вы можете создать конструктор и указать несколько параметров, которые будут переданы при создании объекта.
В одном классе может быть неограниченное количество конструкторов, и интерпретатор сам будет понимать, к какому конструктору вы обращаетесь. Чтобы создать конструктор, необходимо использовать ключевое слово __init__. Пример:
class Human: name = None age = None
def __init__(self, name, age): self.name = name
self.age = age
Передача в экземпляр класса реализуется следующим образом: human1 = Human("Иван", 20)
Аргументы по умолчанию в методах Python – это те аргументы, которые принимают значения по умолчанию, если никакие явные значения не передаются этим аргументам из вызова функции. Пример метода с аргументами по умолчанию:
def set_data(self, name=None, age=None): self.name = name
self.age = age
При вызове данного метода без параметров name и age присваиваются значения None. При передаче каких-либо двух других значений они будут присвоены соответственно.
Метод Python может иметь как обычные (явные), так и стандартные аргументы одновременно. Если первый аргумент функции является нормальным аргументом, в то время как второй аргумент является аргументом по умолчанию со значением, то количество передаваемых
30
