Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Язык программирования высокого уровня Python. Функции, структуры данных, дополнительные модули. Учебное пособие
.pdf
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
