Главная страница

ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов


Скачать 7.92 Mb.
НазваниеНиколай Прохоренок Владимир Дронов
Дата05.05.2023
Размер7.92 Mb.
Формат файлаpdf
Имя файлаПрохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен.pdf
ТипДокументы
#1111379
страница19 из 83
1   ...   15   16   17   18   19   20   21   22   ...   83
>>> d.isoformat(" ") # Пробел в качестве разделителя '2017-11-21 17:56:41'
 ctime()
— возвращает строку формата "%a %b %d %H:%M:%S %Y"
:
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.ctime()
'Tue Nov 21 17:56:41 2017'
 strftime(<Строка формата>)
— возвращает отформатированную строку. В строке фор- мата можно указывать комбинации специальных символов, которые используются в функции strftime()
из модуля time
:

Глава 10. Работа с датой и временем
201
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.strftime("%d.%m.%Y %H:%M:%S")
'21.11.2017 17:56:41'
Поддерживаются также следующие атрибуты класса:
 min
— минимально возможные значения даты и времени;
 max
— максимально возможные значения даты и времени;
 resolution
— минимальное возможное различие между значениями даты и времени.
Значения этих атрибутов:
>>> datetime.datetime.min datetime.datetime(1, 1, 1, 0, 0)
>>> datetime.datetime.max datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
>>> datetime.datetime.resolution datetime.timedelta(0, 0, 1)
П
РИМЕЧАНИЕ
Класс datetime также поддерживает методы astimezone(), dst(), utcoffset() и tzname()
. За подробной информацией по этим методам, а также по абстрактному классу tzinfo
, обращайтесь к документации по модулю datetime.
10.5. Модуль calendar: вывод календаря
Модуль calendar формирует календарь в виде простого текста или HTML-кода. Прежде чем использовать модуль, необходимо подключить его с помощью инструкции: import calendar
Модуль предоставляет следующие классы:

Calendar
— базовый класс, который наследуют все остальные классы. Формат конструк- тора:
Calendar([<Первый день недели>])
В качестве примера получим двумерный список всех дней в ноябре 2017 года, распреде- ленных по дням недели:
>>> import calendar
>>> c = calendar.Calendar(0)
>>> c.monthdayscalendar(2017, 11) # 11 — это ноябрь
[[0, 0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26], [27, 28, 29, 30, 0, 0, 0]]

TextCalendar
— позволяет вывести календарь в виде простого текста. Формат конструк- тора:
TextCalendar([<Первый день недели>])
Выведем календарь на весь 2017 год:
>>> c = calendar.TextCalendar(0)
>>> print(c.formatyear(2017)) # Текстовый календарь на 2017 год

202
Часть I. Основы языка Python
В качестве результата мы получим большую строку, содержащую календарь в виде от- форматированного текста;

LocaleTextCalendar
— позволяет вывести календарь в виде простого текста. Названия месяцев и дней недели выводятся в соответствии с указанной локалью. Формат конст- руктора:
LocaleTextCalendar([<Первый день недели>[, <Название локали>]])
Выведем календарь на весь 2017 год на русском языке:
>>> c = calendar.LocaleTextCalendar(0, "Russian_Russia.1251")
>>> print(c.formatyear(2017))

HTMLCalendar
— позволяет вывести календарь в формате HTML. Формат конструктора:
HTMLCalendar([<Первый день недели>])
Выведем календарь на весь 2017 год:
>>> c = calendar.HTMLCalendar(0)
>>> print(c.formatyear(2017))
Результатом будет большая строка с HTML-кодом календаря, отформатированного в виде таблицы;

LocaleHTMLCalendar
— позволяет вывести календарь в формате HTML. Названия ме- сяцев и дней недели выводятся в соответствии с указанной локалью. Формат конструк- тора:
LocaleHTMLCalendar([<Первый день недели>[, <Название локали>]])
Выведем календарь на весь 2017 год на русском языке в виде отдельной веб-страницы:
>>> c = calendar.LocaleHTMLCalendar(0, "Russian_Russia.1251")
>>> xhtml = c.formatyearpage(2017, encoding="windows-1251")
>>> print(xhtml.decode("cp1251"))
В первом параметре всех конструкторов указывается число от
0
(для понедельника) до
6
(для воскресенья). Если параметр не указан, его значение принимается равным
0
. Вместо чисел можно использовать встроенные константы:
MONDAY
,
TUESDAY
,
WEDNESDAY
,
THURSDAY
,
FRIDAY
,
SATURDAY
или
SUNDAY
, поддерживаемые классом calendar
. Изменить значение пара- метра позволяет метод setfirstweekday(<Первый день недели>)
В качестве примера выведем текстовый календарь на январь 2017 года, где первым днем недели является воскресенье:
>>> c = calendar.TextCalendar() # Первый день понедельник
>>> c.setfirstweekday(calendar.SUNDAY) # Первый день теперь воскресенье
>>> print(c.formatmonth(2017, 1)) # Текстовый календарь на январь 2017 г.
10.5.1. Методы классов TextCalendar и LocaleTextCalendar
Классы
TextCalendar и
LocaleTextCalendar поддерживают следующие методы:
 formatmonth(<Год>, <Месяц>[, <Ширина поля с днем>[, <Количество символов перевода строки>]])
— возвращает текстовый календарь на указанный месяц в году. Третий па- раметр позволяет указать ширину поля с днем, а четвертый параметр — количество символов перевода строки между строками.

Глава 10. Работа с датой и временем
203
Выведем календарь на декабрь 2017 года:
>>> import calendar
>>> c = calendar.LocaleTextCalendar(0, "Russian_Russia.1251")
>>> print(c.formatmonth(2017, 12))
Декабрь 2017
Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
 prmonth(<Год>, <Месяц>[, <Ширина поля с днем>[, <Количество символов перевода строки>]])
— аналогичен методу formatmonth()
, но не возвращает календарь в виде строки, а сразу выводит его на экран.
Распечатаем календарь на декабрь 2017 года, указав ширину поля с днем, равной 4 сим- волам:
>>> c = calendar.LocaleTextCalendar(0, "Russian_Russia.1251")
>>> c.prmonth(2017, 12, 4)
Декабрь 2017
Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
 formatyear(<Год>[, w=2][, l=1][, c=6][, m=3])
— возвращает текстовый календарь на указанный год. Параметры имеют следующее предназначение:
• w
— ширина поля с днем (по умолчанию
2
);
• l
— количество символов перевода строки между строками (по умолчанию
1
);
• c
— количество пробелов между месяцами (по умолчанию
6
);
• m
— количество месяцев на строке (по умолчанию
3
).
Значения можно записывать через запятую в порядке следования параметров или при- своить значение названию параметра.
В качестве примера сформируем календарь на 2018 год, при этом на одной строке выве- дем сразу четыре месяца и установим количество пробелов между месяцами:
>>> c = calendar.LocaleTextCalendar(0, "Russian_Russia.1251")
>>> print(c.formatyear(2018, m=4, c=2))
 pryear(<Год>[, w=2][, l=1][, c=6][, m=3])
— аналогичен методу formatyear()
, но не возвращает календарь в виде строки, а сразу выводит его.
В качестве примера распечатаем календарь на 2018 год по два месяца на строке, рас- стояние между месяцами установим равным 4-м символам, ширину поля с датой — рав- ной 2-м символам, а строки разделим одним символом перевода строки:
>>> c = calendar.LocaleTextCalendar(0, "Russian_Russia.1251")
>>> c.pryear(2018, 2, 1, 4, 2)

204
Часть I. Основы языка Python
10.5.2. Методы классов HTMLCalendar и LocaleHTMLCalendar
Классы
HTMLCalendar и
LocaleHTMLCalendar поддерживают следующие методы:
 formatmonth(<Год>, <Месяц>[, ])
— возвращает календарь на указанный месяц в году в виде HTML-кода. Если в третьем параметре указано значение
True
(зна- чение по умолчанию), то в заголовке таблицы после названия месяца будет указан год.
Календарь будет отформатирован в виде HTML-таблицы. Для каждой ячейки таблицы задается стилевой класс, с помощью которого можно управлять внешним видом кален- даря. Названия стилевых классов доступны через атрибут cssclasses
, который содержит список названий для каждого дня недели:
>>> import calendar
>>> c = calendar.HTMLCalendar(0)
>>> print(c.cssclasses)
['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']
Выведем календарь на ноябрь 2017 года, для будних дней укажем класс "workday"
, а для выходных дней — класс "week-end"
:
>>> c = calendar.LocaleHTMLCalendar(0, "Russian_Russia.1251")
>>> c.cssclasses = ["workday", "workday", "workday", "workday",
"workday", "week-end", "week-end"]
>>> print(c.formatmonth(2017, 11, False))
 formatyear(<Год>[, <Количество месяцев на строке>])
— возвращает календарь на ука- занный год в виде HTML-кода. Календарь будет отформатирован с помощью несколь- ких HTML-таблиц.
Для примера выведем календарь на 2017 год так, чтобы на одной строке выводились сразу четыре месяца:
>>> c = calendar.LocaleHTMLCalendar(0, "Russian_Russia.1251")
>>> print(c.formatyear(2017, 4))
 formatyearpage(<Год>[, width][, css][, encoding])
— возвращает календарь на ука- занный год в виде отдельной веб-страницы. Параметры имеют следующее предназначе- ние:
• width
— количество месяцев на строке (по умолчанию
3
);
• css
— название файла с таблицей стилей (по умолчанию "calendar.css"
);
• encoding
— кодировка файла. Название кодировки будет указано в параметре encoding
XML-пролога, а также в теге
Значения можно указать через запятую в порядке следования параметров или присвоить значение названию параметра.
Для примера выведем календарь на 2017 год так, чтобы на одной строке выводилось четыре месяца, дополнительно указав кодировку:
>>> c = calendar.LocaleHTMLCalendar(0, "Russian_Russia.1251")
>>> xhtml = c.formatyearpage(2017, 4, encoding="windows-1251")
>>> type(xhtml) # Возвращаемая строка имеет тип данных bytes

>>> print(xhtml.decode("cp1251"))

Глава 10. Работа с датой и временем
205 10.5.3. Другие полезные функции
Модуль calendar предоставляет еще несколько функций, которые позволяют вывести тек- стовый календарь без создания экземпляра соответствующего класса и получить дополни- тельную информацию о дате:
 setfirstweekday(<Первый день недели>)
— устанавливает первый день недели для ка- лендаря. В качестве параметра указывается число от
0
(для понедельника) до
6
(для вос- кресенья). Вместо чисел можно использовать встроенные константы:
MONDAY
,
TUESDAY
,
WEDNESDAY
,
THURSDAY
,
FRIDAY
,
SATURDAY
или
SUNDAY
. Получить текущее значение параметра можно с помощью функции firstweekday()
.\
Установим воскресенье первым днем недели:
>>> import calendar
>>> calendar.firstweekday() # По умолчанию 0 0
>>> calendar.setfirstweekday(6) # Изменяем значение
>>> calendar.firstweekday() # Проверяем установку
6
 month(<Год>, <Месяц>[, <Ширина поля с днем>[, <Количество символов перевода стро- ки>]])
— возвращает текстовый календарь на указанный месяц в году. Третий параметр позволяет указать ширину поля с днем, а четвертый параметр — количество символов перевода строки между строками.
Выведем календарь на ноябрь 2017 года:
>>> calendar.setfirstweekday(0)
>>> print(calendar.month(2017, 11)) # Ноябрь 2017 года
November 2017
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
 prmonth(<Год>, <Месяц>[, <Ширина поля с днем>[, <Количество символов перевода строки>]])
— аналогична функции month()
, но не возвращает календарь в виде строки, а сразу выводит его.
Выведем календарь на ноябрь 2017 года:
>>> calendar.prmonth(2017, 11) # Ноябрь 2017 года
 monthcalendar(<Год>, <Месяц>)
— возвращает двумерный список всех дней в указанном месяце, распределенных по дням недели. Дни, выходящие за пределы месяца, будут представлены нулями.
Выведем массив для ноября 2017 года:
>>> calendar.monthcalendar(2017, 11)
[[0, 0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26], [27, 28, 29, 30, 0, 0, 0]]
 monthrange(<Год>, <Месяц>)
— возвращает кортеж из двух элементов: номера дня неде- ли, приходящегося на первое число указанного месяца, и количества дней в месяце:

206
Часть I. Основы языка Python
>>> print(calendar.monthrange(2017, 11))
(2, 30)
>>> # Ноябрь 2017 года начинается со среды (2) и включает 30 дней
 calendar(<Год>[, w][, l][, c][, m])
— возвращает текстовый календарь на указанный год. Параметры имеют следующее предназначение:
• w
— ширина поля с днем (по умолчанию
2
);
• l
— количество символов перевода строки между строками (по умолчанию
1
);
• c
— количество пробелов между месяцами (по умолчанию
6
);
• m
— количество месяцев на строке (по умолчанию
3
).
Значения можно указать через запятую в порядке следования параметров или присвоить значение названию параметра.
Для примера выведем календарь на 2017 год так, чтобы на одной строке выводилось сразу четыре месяца, установив при этом количество пробелов между месяцами:
>>> print(calendar.calendar(2017, m=4, c=2))
 prcal(<Год>[, w][, l][, c][, m])
— аналогична функции calendar()
, но не возвращает календарь в виде строки, а сразу выводит его.
Для примера выведем календарь на 2017 год по два месяца на строке, расстояние между месяцами установим равным 4-м символам, ширину поля с датой — равной 2-м симво- лам, а строки разделим одним символом перевода строки:
>>> calendar.prcal(2017, 2, 1, 4, 2)
 weekheader()
— возвращает строку, которая содержит аббревиатуры дней недели с учетом текущей локали, разделенные пробелами. Единственный параметр задает длину каждой аббре- виатуры в символах:
>>> calendar.weekheader(4)
'Mon Tue Wed Thu Fri Sat Sun '
>>> calendar.weekheader(2)
'Mo Tu We Th Fr Sa Su'
>>> import locale # Задаем другую локаль
>>> locale.setlocale(locale.LC_ALL, "Russian_Russia.1251")
'Russian_Russia.1251'
>>> calendar.weekheader(2)
'Пн Вт Ср Чт Пт Сб Вс'
 isleap(<Год>)
— возвращает значение
True
, если указанный год является високосным, в противном случае —
False
:
>>> calendar.isleap(2017), calendar.isleap(2016)
(False, True)
 leapdays(<Год1>, <Год2>)
— возвращает количество високосных лет в диапазоне от
<Год1>
до
<Год2>
(
<Год2>
не учитывается):
>>> calendar.leapdays(2013, 2016) # 2016 не учитывается
0
>>> calendar.leapdays(2010, 2016) # 2012 — високосный год
1
>>> calendar.leapdays(2010, 2017) # 2012 и 2016 — високосные года
2

Глава 10. Работа с датой и временем
207
 weekday(<Год>, <Месяц>, <День>)
— возвращает номер дня недели (
0
— для понедель- ника,
6
— для воскресенья):
>>> calendar.weekday(2017, 11, 22)
2
 timegm(<Объект struct_time>)
— возвращает число, представляющее количество се- кунд, прошедших с начала эпохи. В качестве параметра указывается объект struct_time с датой и временем, возвращаемый функцией gmtime()
из модуля time
:
>>> import calendar, time
>>> d = time.gmtime(1511348777.0) # Дата 22-11-2017
>>> d time.struct_time(tm_year=2017, tm_mon=11, tm_mday=22, tm_hour=11, tm_min=6, tm_sec=17, tm_wday=2, tm_yday=326, tm_isdst=0)
>>> tuple(d)
(2017, 11, 22, 11, 6, 17, 2, 326, 0)
>>> calendar.timegm(d)
1511348777
>>> calendar.timegm((2017, 11, 22, 11, 6, 17, 2, 326, 0))
1511348777
Модуль calendar также предоставляет несколько атрибутов:
 day_name
— список полных названий дней недели в текущей локали:
>>> [i for i in calendar.day_name]
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',
'Saturday', 'Sunday']
>>> import locale # Настройка локали
>>> locale.setlocale(locale.LC_ALL, "Russian_Russia.1251")
'Russian_Russia.1251'
>>> [i for i in calendar.day_name]
['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота',
'воскресенье']
 day_abbr
— список аббревиатур названий дней недели в текущей локали:
>>> [i for i in calendar.day_abbr]
['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
>>> import locale # Настройка локали
>>> locale.setlocale(locale.LC_ALL, "Russian_Russia.1251")
'Russian_Russia.1251'
>>> [i for i in calendar.day_abbr]
['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']
 month_name
— список полных названий месяцев в текущей локали:
>>> [i for i in calendar.month_name]
['', 'January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December']
>>> import locale # Настройка локали
>>> locale.setlocale(locale.LC_ALL, "Russian_Russia.1251")
'Russian_Russia.1251'
>>> [i for i in calendar.month_name]
['', 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль',
'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь']

208
Часть I. Основы языка Python
 month_abbr
— список аббревиатур названий месяцев в текущей локали:
>>> [i for i in calendar.month_abbr]
['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
'Sep', 'Oct', 'Nov', 'Dec']
>>> import locale # Настройка локали
>>> locale.setlocale(locale.LC_ALL, "Russian_Russia.1251")
'Russian_Russia.1251'
>>> [i for i in calendar.month_abbr]
['', 'янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен',
'окт', 'ноя', 'дек']
10.6. Измерение времени выполнения фрагментов кода
Модуль timeit позволяет измерить время выполнения небольших фрагментов кода с целью оптимизации программы. Прежде чем использовать модуль, необходимо подключить его с помощью инструкции: from timeit import Timer
Измерения производятся с помощью класса
Timer
. Конструктор класса имеет следующий формат:
Timer([stmt='pass'][, setup='pass'][, timer=])
В параметре stmt указывается код (в виде строки), время выполнения которого предполага- ется измерить. Параметр setup позволяет указать код, который будет выполнен перед изме- рением времени выполнения кода в параметре stmt
1   ...   15   16   17   18   19   20   21   22   ...   83


написать администратору сайта