Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Язык программирования высокого уровня Python. Функции, структуры данных, дополнительные модули. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
9.2. Основные функции модуля re
6. p.subn() – ищет все совпадения с шаблоном и заменяет их указан­ным значением, но возвращает не строку, а кортеж из двух элементов – измененной строки и количества произведенных замен. Формат метода:
subn(Новый_фрагмент_или_функция, Строка замены[, Мак­симальное количество замен])
Пример: Заменим все числа в строке на 0.
>>>import re
>>>p = re.compile(r”[0-9]+”) >>>p.subn(’0’,’10, 20,30’) (’0, 0, 0’, 3)
7. p.split() – разбивает строку в соответствии с шаблоном и возвра­щает список подстрок. Второй параметр задает указанное количество подстрок. Формат метода:
split(Исходная_строка[, Максималь­ное_количество_подстрок])
Пример:
>>>import re
>>>p = re.compile(r”[\s,.]+”) >>>p.split(’aaa\nccc\r\nvvv.bbb’) [‘aaa’, ‘ccc’, ‘vvv’, ‘bbb’]
9.2. Основные функции модуля re
Вместо методов объекта регулярных выражений можно пользоваться одноименными функциями модуля re: re.match(), re.search(),
re.findall(), re.finditer(), re.sub(), re.subn(), re.split().
Форматы функций:
61
9. Модуль re
1. match(Шаблон, Строка[, Модификатор])
2. search(Шаблон, Строка[, Модификатор])
3. findall(Шаблон, Строка[, Модификатор])
4. finditer(Шаблон, Строка[, Модификатор])
5. sub(Шаблон, Новый_фрагмент_или_ссылка_на_функцию,
Строка_для_замены[, Максимальное_количество_замен[, Модификатор]])
6. subn(Шаблон, Новый_фрагмент_или_ссылка_на_функцию, Строка_для_замены[, Максимальное_количество_замен[, Модификатор]])
7. split(Шаблон, Исходная_строка[, Максималь- ное_количество_замен[, Модификатор]])
9.3. Объекты MatchObject
Экземпляры класса MatchObject возвращаются функциями search() и match() и содержат информацию о группах, а также о позициях найденных совпадений. Экземпляр m класса MatchObject обладает следующими методами и атрибутами:
1. m.expand(Шаблон)
производит замену в строке. Внутри шаблона можно использовать обратные ссылки, такие как “\1” и “\2”, и именованные ссылки, такие как “\g<n>” и “\g<name>”.
2. m.group([group1, group2, ...])
Возвращает одну или более подгруппу в совпадении. Аргументы определяют номера групп или их имена. Если имя группы не задано, возвращается совпадение целиком. Если указана только одна группа, возвращается строка, содержащая текст, совпавший с группой. В противном случае возвращается кортеж, содержащий совпадения со всеми указанными группами. Если было запрошено содержимое группы с недопустимым именем или номером, возбуждает исключение IndexError.
m.groups([Значение_по_умолчанию])
Возвращает кортеж, содержащий совпадения со всеми группами в шаблоне. В аргументе указывается значение, возвращаемое для групп, не участвовавших в совпадении (по умолчанию имеет значение None).
62
9.3. Объекты MatchObject
3. m.groupdict([default])
Возвращает словарь, содержащий совпадения с именованными группами. В аргументе default указывается значение, возвращаемое для групп, не участвовавших в сопоставлении (по умолчанию имеет значение None).
4. m.start([group]) и m.end([group])
Эти два метода возвращают индексы начала и конца совпадения с группой в строке. Если аргумент group опущен, возвращаются позиции всего совпадения. Если группа существует, но не участвовала в сопоставлении, возвращается None.
5. m.span([group])
Возвращает кортеж из двух элементов (m.start(group), m.end(group)). Если совпадений с группой group не было обнаружено, возвращается кортеж (None, None). Если аргумент group опущен, возвращаются позиции начала и конца всего совпадения.
Аргументы
m.pos
Значение параметра Начальная_позиция в методах search() или match().
m.endpos
Значение параметра Конечная_позиция в методах search() или match().
m.lastindex
Числовой индекс последней совпавшей группы. Если ни одна группа не совпала или в шаблоне нет ни одной группы, возвращается None или в шаблоне нет ни одной группы.
m.lastgroup
Имя последней совпавшей группы. Если ни одна группа не совпала или в шаблоне нет ни одной группы, возвращается None.
m.re
Объект регулярного выражения, чьим методом match() или search() был создан данный экземпляр класса MatchObject.
m.string
Значение параметра «Строка» в методах (функциях) match() или search().
63
10. РАБОТА С ДАТОЙ И ВРЕМЕНЕМ (МОДУЛЬ DATETIME)
Для работы с датой и временем в языке Питон предназначены сле-
дующие модули:
1. time позволяет получить текущие дату и время, а также произвести форматированный вывод.
2. datetime позволяет производить арифметические операции, срав­нивать даты, выводить дату и время в различных форматах.
3. calendar – позволяет вывести календарь в виде простого текста или HTML-формата.
4. timeit – позволяет измерить время выполнения небольших фрагмен­тов кода с целью оптимизации программы.
Модуль datetime
Модуль datetime позволяет манипулировать датой и временем, например, выполнять арифметические операции, сравнивать даты, выво­дить дату и время в различных форматах.
Модуль содержит 5 классов:
1. date – представление даты в виде объекта со стандартным пред­ставлением даты (год, месяц, день). Экземпляр класса является неизменя­емым объектом.
2. time представление времени в виде объекта со стандартным представлением времени (часы, минуты, секунды, микросекунды).
3. timedelta – дата в виде количества дней, секунд и микросе­кунд. Обычно используется для задания интервала между двумя момен­тами времени, с точностью до микросекунд.
4. datetime – представление комбинации даты и времени в виде объекта со стандартным представлением (год, месяц, день, часы, минуты, секунды, микросекунды).
5. tzinfo абстрактный базовый класс для получения информации о временной зоне (например, для учета часового пояса и / или летнего времени). Этот класс рассматриваться не будет.
Возможны два способа использования классов из модуля datetime:
1. Подключить модуль datetime с помощью инструкции:
64
10. Работа с датой и временем (модуль datetime)
import datetime
Тогда создание экземпляра класса будет осуществляться следующим
образом:
d = datetime.timedelta(1, 3600, 1000) dt = datetime.datetime(2011, 6, 5, 519, 21) t_date = datetime.datetime.now
2. Подключить необходимые классы модуля datetime с помощью ин-
струкции:
from datetime import datetime, timedelta #из модуля datetime импортировать классы datetime, timedelta
Тогда создание экземпляра указанных классов будет осуществ-
ляться следующим образом:
d = timedelta(1, 3600, 1000) dt =datetime(2011, 6, 5, 5, 19, 21) t_date = datetime.now
Класс datetime
Позволяет выполнять операции над комбинацией даты и времени. Конструктор класса имеет следующий формат:
datetime(Год, Месяц, День[, часы][, минуты][, секун- ды][, микросекунды][, зона])
Первые три параметра являются обязательными.
Атрибуты класса:
1. year – год (число в диапазоне от MINYEAR до MAXYEAR)
2. month – месяц (число от 1 до 12)
3. day – день (число от 1 до количества дней в месяце)
4. hour – часы (число от 0 до 23)
5. minute – минуты (число от 0 до 59)
65
10. Работа с датой и временем (модуль datetime)
6. second – секунды (число от 0 до 59)
7. microsecond – микросекунды (число от 0 до 999999)
8. tzinfo – зона (экземпляр класса tzinfo или значение None)
Пример:
from datetime import datetime, timedelta
dt = datetime(2011, 6, 5, 5, 19, 21) print(dt.hour, dt.minute, dt.second) # Результат (5, 19, 21)
Операции над экземплярами класса datetime:
1. datetime2 = datetime1 + timedelta # прибавляет к дате ука­занный период
2. datetime2 = datetime1 - timedelta # вычитает из даты ука­занный период
3. timedelta = datetime1 - datetime2 # возвращает разницу между датами
4. поддерживаются операторы сравнения ( >, <, ==. =, >=, <= )
Примеры:
dt1 = datetime(2012, 8, 14) dt2 = datetime(2012, 6, 14)
# сравнение дат
if dt1 > dt2: print 'dt1 > dt2'
# создаем новую дату, суммируя имеющуюся с двумя днями
new_dt = dt1+ timedelta(days=2) print new_dt
Методы для создания экземпляра класса datetime:
1. today() — возвращает текущую дату и время.
datetime.datetime.today() # Результат datetime.datetime(2011, 6, 5, 9, 12, 35,468000)
66
10. Работа с датой и временем (модуль datetime)
2. now(tz=None) — возвращает текущую дату и время. Если параметр не задан, то метод аналогичен today().
now = datetime.now() print now
3. fromtimestamp(Количество секунд[, Зона]) возвращает дату, соответствующую количеству секунд, прошедших с начала эпохи (обычно с 1 января 1970 года).
4. fromordinal(Количество дней с первого года) дата, со­ответствующая количеству дней, прошедших с 01.01.1970.
5. strptime(Строка с датой, Строка формата) – разбирает строку, указанную в первом параметре в соответствии со строкой форма­та.
dt = datetime.strptime("22/01/11", "%d/%m/%y") print dt # получаем и печатаем только дату print dt.date()
6. strftime(Строка формата) – возвращает отформатированную строку.
dt = datetime.datetime(2006, 11, 21, 16, 30) dt.stfptime("%d/%m/%y %H:%M") #Результат "21/11/06 16:30"
7. combine(Экземпляр класса date, Экземпляр класса time) – создает экземпляр класса datetime в соответствии со значениями
экземпляров классов date и time.
d = datetime.date(2011, 6, 5) t = datetime.time(9, 12, 35) #Результат datetime.datetime(2011, 6, 5, 9, 12, 35)
Методы для работы с аргументами экземпляра класса datetime:
1. date() объект даты (с отсечением времени).
dt = datetime.datetime(2006, 11, 21, 16, 30)
67
10. Работа с датой и временем (модуль datetime)
# получаем и печатаем только дату
print dt.date()
2. time() объект времени (с отсечением даты).
dt = datetime.datetime(2006, 11, 21, 16, 30)
# получаем и печатаем год
print dt.time
3. toordinal() количество дней, прошедших с 01.01.1970.
dt = datetime.datetime(2011, 6, 5, 23, 48, 23) dt.toordinal() #Результат 734293
4. weekday() день недели в виде числа, понедельник 0, воскресенье 6.
dt = datetime.datetime(2006, 11, 21, 16, 30)
# получаем и печатаем день недели
print dt.weekday()
5. replace([year][, month][, day][, hour][, minute][,
second][, microsecond][, tzinfo]) – возвращает дату с об- новленными значениями. Значения можно указывать через запятую в по­рядке следования параметров или присвоить значение названию парамет­ра.
>>> d = datetime.datetime(2006, 11, 21, 16, 30, 50) >>> d.replace(2008,12) datetime.datetime(2008, 12, 21, 16, 30, 50)
или
>>> d.replace(hour=12, month=10) datetime.datetime(2006, 10, 21, 12, 30, 50)
6. strftime(Строка формата) – возвращает отформатированную строку.
dt = datetime.datetime(2006, 11, 21, 16, 30) dt.stfptime("%d/%m/%y %H:%M") #Результат "21/11/06 16:30"
68
10. Работа с датой и временем (модуль datetime)
7. isocalendar() – возвращает кортеж из трех элементов (год, номер недели в году, порядковый номер дня в неделе):
>>> d = datetime.datetime(2011, 6, 5, 23, 48, 23) >>> d.isocalendar() (2011, 22, 7)
Класс timedelta
Позволяет выполнять операции над датами. Конструктор класса имеет следующий формат:
timedelta([дни][, секунды][, микросекунды] ][, милли­секунды][, минуты][, часы][, недели])
Все параметры являются необязательными.
Атрибуты класса:
1. days – дни (число от -999999999 до 999999999)
2. seconds – секунды (число от 0 до 3600*24)
3. microseconds – микросекунды (число от 0 до 1000000) Автоматически формируемые параметры:
4. milliseconds – микросекунды
5. minutes – минуты
6. hours – часы
7. weeks – недели (одна неделя – 7 дней)
Операции над экземплярами класса datetime:
1. математические операции (=, -, /, //, %, *)
2. операции сравнения ( >, <, ==. =, >=, <= )
# создаем новую дату, суммируя имеющуюся с двумя днями new_dt = dt + timedelta(days=2) print dt
# еще пример суммирования с дельтой for i in range(5): print dt + timedelta(hours=2*i)
69
11. МОДУЛЬ RANDOM. ГЕНЕРАЦИЯ СЛУЧАЙНЫХ ЧИСЕЛ
Модуль random позволяет генерировать случайные числа. Прежде чем использовать модуль, необходимо подключить его или все его функ­ции с помощью инструкций:
import random from random import *
Основные функции:
1. random() – возвращает псевдослучайное число от 0.0 до 1.0
import random ran = random.random() print(ran) # Результат: 0.38419833699730754
2. seed([Параметр][, Версия]) – настраивает генератор случайных чисел на одну и туже последовательность. По умолчанию используется системное время. Если значение будет одинаковым, то генерируется оди­наковое число:
import random random.seed(10) ran = random.random() print(ran) # Результат: 0.5714025946899135
random.seed(10) ran = random.random() print(ran) # Результат: 0.5714025946899135
3. uniform(Начало, Конец) – возвращает псевдослучайное веще­ственное число в диапазоне (Начало, Конец). Параметр «Начало» может быть отрицательным.
import random ran = random.uniform(0,30) print(ran) # Результат: 22.423989312930026
70
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]