Кодировщики и декодировщики

Класс json.JSONDecoder(object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None) - простой декодер JSON.

Выполняет следующие преобразования при декодировании:

JSON Python
object dict
array list
string str
number (int) int
number (real) float
true True
false False
null None

Он также понимает NaN, Infinity, и -Infinity как соответствующие значения float, которые находятся за пределами спецификации JSON.

Класс json.JSONEncoder(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

Расширяемый кодировщик JSON для структур данных Python. Поддерживает следующие объекты и типы данных по умолчанию:

Python JSON
dict object
list, tuple array
str string
int, float number
True true
False false
None null

Модуль calendar

Модуль calendar позволяет напечатать себе календарик (а также содержит некоторые другие полезные функции для работы с календарями).

calendar.Calendar(firstweekday=0) - класс календаря. firstweekday - первый день недели (0 - понедельник, 6 - воскресенье).

Методы:

iterweekdays() - итератор дней недели, начиная с firstweekday.

itermonthdates(year, month) - итератор для месяца month года year. Возвращает все дни этого месяца (как объекты datetime.date), а также дни до и после этого месяца до полной недели.

itermonthdays2(year, month) - как itermonthdates, только дни возвращаются не как datetime.date объекты, а кортежи (номер дня, номер дня недели).

itermonthdays(year, month) - как itermonthdates, только дни возвращаются не как datetime.date объекты, а номера дней.

monthdatescalendar(year, month) - список недель в месяце. Неделя - список из 7 объектов datetime.date.

monthdays2calendar(year, month) - как monthdatescalendar, но объекты - кортежи (номер дня, номер дня недели).

monthdayscalendar(year, month) - как monthdatescalendar, но объекты - номера дней.

calendar.TextCalendar(firstweekday=0) - класс для генерации текстового календаря.

Методы:

formatmonth(theyear, themonth, w=0, l=0) - возвращает календарь на месяц в виде строки, с шириной колонки w и высотой l.

prmonth(theyear, themonth, w=0, l=0) - печатает календарь на месяц.

formatyear(theyear, w=2, l=1, c=6, m=3) - возвращает календарь на год; из m колонок, шириной даты w, высотой недели l и количеством пробелов между месяцами c.

pryear(theyear, w=2, l=1, c=6, m=3) - печатает календарь на год.

calendar.HTMLCalendar(firstweekday=0) - класс для генерации HTML календаря.

Методы:

formatmonth(theyear, themonth, withyear=True) - календарь на месяц в виде HTML таблицы. Если withyear True, номер года будет включен в заголовок.

formatyear(theyear, width=3) - календарь на год в виде HTML таблицы. width - количество месяцев в ряду.

formatyearpage(theyear, width=3, css="calendar.css", encoding=None) - календарь на год в виде полноценной HTML страницы, с подключением файла css (который вы можете создать сами), и в кодировке encoding.

calendar.LocaleTextCalendar(firstweekday=0, locale=None) - позволяет создать текстовый календарь с названиями на родном языке.

calendar.LocaleHTMLCalendar(firstweekday=0, locale=None) - позволяет создать HTML календарь с названиями на родном языке.

Например, вот такой календарик получился у меня:

import calendara = calendar.LocaleHTMLCalendar(locale='Russian_Russia')with open('calendar.html', 'w') as g: print(a.formatyear(2014, width=4), file=g)
Январь
Пн Вт Ср Чт Пт Сб Вс
   
   
Февраль
Пн Вт Ср Чт Пт Сб Вс
         
   
Март
Пн Вт Ср Чт Пт Сб Вс
         
           
Апрель
Пн Вт Ср Чт Пт Сб Вс
 
       
Май
Пн Вт Ср Чт Пт Сб Вс
     
 
Июнь
Пн Вт Ср Чт Пт Сб Вс
           
           
Июль
Пн Вт Ср Чт Пт Сб Вс
 
     
Август
Пн Вт Ср Чт Пт Сб Вс
       
Сентябрь
Пн Вт Ср Чт Пт Сб Вс
         
Октябрь
Пн Вт Ср Чт Пт Сб Вс
   
   
Ноябрь
Пн Вт Ср Чт Пт Сб Вс
         
Декабрь
Пн Вт Ср Чт Пт Сб Вс
       

Также модуль calendar предоставляет несколько полезных функций:

calendar.setfirstweekday(weekday) - устанавливает первый день недели (0 - понедельник, 6 - воскресенье). Также предоставлены значения calendar.MONDAY, calendar.TUESDAY, calendar.WEDNESDAY, calendar.THURSDAY, calendar.FRIDAY, calendar.SATURDAY и calendar.SUNDAY.

calendar.firstweekday() - возвращает первый день недели.

calendar.isleap(year) - является ли год високосным.

calendar.leapdays(y1, y2) - количество високосных лет в последовательности от y1 до y2.

calendar.weekday(year, month, day) - день недели для этой даты.

calendar.monthrange(year, month) - день недели первого дня месяца и количество дней в этом месяце.

Модуль os

Модуль os предоставляет множество функций для работы с операционной системой, причём их поведение, как правило, не зависит от ОС, поэтому программы остаются переносимыми. Здесь будут приведены наиболее часто используемые из них.

Будьте внимательны: некоторые функции из этого модуля поддерживаются не всеми ОС.

os.name - имя операционной системы. Доступные варианты: 'posix', 'nt', 'mac', 'os2', 'ce', 'java'.

os.environ - словарь переменных окружения. Изменяемый (можно добавлять и удалять переменные окружения).

os.getlogin() - имя пользователя, вошедшего в терминал (Unix).

os.getpid() - текущий id процесса.

os.uname() - информация об ОС. возвращает объект с атрибутами: sysname - имя операционной системы, nodename - имя машины в сети (определяется реализацией), release - релиз, version - версия, machine - идентификатор машины.

os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True) - проверка доступа к объекту у текущего пользователя. Флаги: os.F_OK - объект существует, os.R_OK - доступен на чтение, os.W_OK - доступен на запись, os.X_OK - доступен на исполнение.

os.chdir(path) - смена текущей директории.

os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True) - смена прав доступа к объекту (mode - восьмеричное число).

os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True) - меняет id владельца и группы (Unix).

os.getcwd() - текущая рабочая директория.

os.link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True) - создаёт жёсткую ссылку.

os.listdir(path=".") - список файлов и директорий в папке.

os.mkdir(path, mode=0o777, *, dir_fd=None) - создаёт директорию. OSError, если директория существует.

os.makedirs(path, mode=0o777, exist_ok=False) - создаёт директорию, создавая при этом промежуточные директории.

os.remove(path, *, dir_fd=None) - удаляет путь к файлу.

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) - переименовывает файл или директорию из src в dst.

os.renames(old, new) - переименовывает old в new, создавая промежуточные директории.

os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None) - переименовывает из src в dst с принудительной заменой.

os.rmdir(path, *, dir_fd=None) - удаляет пустую директорию.

os.removedirs(path) - удаляет директорию, затем пытается удалить родительские директории, и удаляет их рекурсивно, пока они пусты.

os.symlink(source, link_name, target_is_directory=False, *, dir_fd=None) - создаёт символическую ссылку на объект.

os.sync() - записывает все данные на диск (Unix).

os.truncate(path, length) - обрезает файл до длины length.

os.utime(path, times=None, *, ns=None, dir_fd=None, follow_symlinks=True) - модификация времени последнего доступа и изменения файла. Либо times - кортеж (время доступа в секундах, время изменения в секундах), либо ns - кортеж (время доступа в наносекундах, время изменения в наносекундах).

os.walk(top, topdown=True, onerror=None, followlinks=False) - генерация имён файлов в дереве каталогов, сверху вниз (если topdown равен True), либо снизу вверх (если False). Для каждого каталога функция walk возвращает кортеж (путь к каталогу, список каталогов, список файлов).

os.system(command) - исполняет системную команду.

os.urandom(n) - n случайных байт. Возможно использование этой функции в криптографических целях.

os.path - модуль, реализующий некоторые полезные функции на работы с путями.

Модуль pickle

Модуль pickle реализует мощный алгоритм сериализации и десериализации объектов Python. "Pickling" - процесс преобразования объекта Python в поток байтов, а "unpickling" - обратная операция, в результате которой поток байтов преобразуется обратно в Python-объект. Так как поток байтов легко можно записать в файл, модуль pickle широко применяется для сохранения и загрузки сложных объектов в Python.

Не загружайте с помощью модуля pickle файлы из ненадёжных источников. Это может привести к необратимым последствиям.

Модуль pickle предоставляет следующие функции для удобства сохранения/загрузки объектов:

pickle.dump(obj, file, protocol=None, *, fix_imports=True) - записывает сериализованный объект в файл. Дополнительный аргумент protocol указывает используемый протокол. По умолчанию равен 3 и именно он рекомендован для использования в Python 3 (несмотря на то, что в Python 3.4 добавили протокол версии 4 с некоторыми оптимизациями). В любом случае, записывать и загружать надо с одним и тем же протоколом.

pickle.dumps(obj, protocol=None, *, fix_imports=True) - возвращает сериализованный объект. Впоследствии вы его можете использовать как угодно.

pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict") - загружает объект из файла.

pickle.loads(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict") - загружает объект из потока байт.

Модуль pickle также определяет несколько исключений:

· pickle.PickleError

o pickle.PicklingError - случились проблемы с сериализацией объекта.

o pickle.UnpicklingError - случились проблемы с десериализацией объекта.

Этих функций вполне достаточно для сохранения и загрузки встроенных типов данных.

import pickledata = { 'a': [1, 2.0, 3, 4+6j], 'b': ("character string", b"byte string"), 'c': set([None, True, False])} with open('data.pickle', 'wb') as f: pickle.dump(data, f) with open('data.pickle', 'rb') as f: data_new = pickle.load(f) print(data_new)

Модуль datetime

Модуль datetime предоставляет классы для обработки времени и даты разными способами. Поддерживается и стандартный способ представления времени, однако больший упор сделан на простоту манипулирования датой, временем и их частями.

Классы, предоставляемые модулем datetime:

Класс datetime.date(year, month, day) - стандартная дата. Атрибуты: year, month, day. Неизменяемый объект.

Класс datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) - стандартное время, не зависит от даты. Атрибуты: hour, minute, second, microsecond, tzinfo.

Класс datetime.timedelta - разница между двумя моментами времени, с точностью до микросекунд.

Класс datetime.tzinfo - абстрактный базовый класс для информации о временной зоне (например, для учета часового пояса и / или летнего времени).

Класс datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None) - комбинация даты и времени.

Обязательные аргументы:

· datetime.MINYEAR (1) ≤ year ≤ datetime.MAXYEAR (9999)

· 1 ≤ month ≤ 12

· 1 ≤ day ≤ количество дней в данном месяце и году

Необязательные:

· 0 ≤ minute < 60

· 0 ≤ second < 60

· 0 ≤ microsecond < 1000000

Методы класса datetime:

datetime.today() - текущая дата, время равно 0.

datetime.fromtimestamp(timestamp) - дата из стандартного представления времени.

datetime.fromordinal(ordinal) - дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.

datetime.now(tz=None) - объект datetime из текущей даты и времени.

datetime.combine(date, time) - объект datetime из комбинации объектов date и time.

datetime.strptime(date_string, format) - преобразует строку в datetime (так же, как и функция strptime из модуля time).

datetime.strftime(format) - см. функцию strftime из модуля time.

datetime.date() - объект даты (с отсечением времени).

datetime.time() - объект времени (с отсечением даты).

datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]) - возвращает новый объект datetime с изменёнными атрибутами.

datetime.timetuple() - возвращает struct_time из datetime.

datetime.toordinal() - количество дней, прошедших с 01.01.1970.

datetime.timestamp() - возвращает время в секундах с начала эпохи.

datetime.weekday() - день недели в виде числа, понедельник - 0, воскресенье - 6.

datetime.isoweekday() - день недели в виде числа, понедельник - 1, воскресенье - 7.

datetime.isocalendar() - кортеж (ISO year, ISO week number, ISO weekday).

datetime.isoformat(sep='T') - красивая строка вида "YYYY-MM-DDTHH:MM:SS.mmmmmm" или, если microsecond == 0, "YYYY-MM-DDTHH:MM:SS"

datetime.ctime() - см. ctime() из модуля time.

Пример работы с классом datetime:

>>> from datetime import datetime, date, time>>> # Using datetime.combine()>>> d = date(2005, 7, 14)>>> t = time(12, 30)>>> datetime.combine(d, t)datetime.datetime(2005, 7, 14, 12, 30)>>> # Using datetime.now() or datetime.utcnow()>>> datetime.now()datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1>>> datetime.utcnow()datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)>>> # Using datetime.strptime()>>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")>>> dtdatetime.datetime(2006, 11, 21, 16, 30)>>> # Using datetime.timetuple() to get tuple of all attributes>>> tt = dt.timetuple()>>> for it in tt:... print(it)...2006 # year11 # month21 # day16 # hour30 # minute0 # second1 # weekday (0 = Monday)325 # number of days since 1st January-1 # dst - method tzinfo.dst() returned None>>> # Date in ISO format>>> ic = dt.isocalendar()>>> for it in ic:... print(it)...2006 # ISO year47 # ISO week2 # ISO weekday>>> # Formatting datetime>>> dt.strftime("%A, %d. %B %Y %I:%M%p")'Tuesday, 21. November 2006 04:30PM'

Модуль bisect

Модуль bisect - обеспечивает поддержку списка в отсортированном порядке с помощью алгоритма деления пополам.

Набор функций:

bisect.insort(list, elem), он же bisect.insort_right(list, elem) - вставка элемента в отсортированный список, при этом elem располагается как можно правее (все элементы, равные ему, остаются слева).

bisect.insort_left(list, elem) - вставка элемента в отсортированный список, при этом elem располагается как можно левее (все элементы, равные ему, остаются справа).

bisect.bisect(list, elem), он же bisect.bisect_right(list, elem) - поиск места для вставки элемента в отсортированный список, таким образом, чтобы elem располагался как можно правее.

bisect.bisect_left(list, elem) - поиск места для вставки элемента в отсортированный список, таким образом, чтобы elem располагался как можно левее.

Для полного счастья не хватает только функции для проверки наличия элемента в отсортированном списке. К счастью, это легко решаемо.

from bisect import bisect_left def contains(l, elem): index = bisect_left(l, elem) if index < len(l): return l[index] == elem return False

И пример работы:

>>> contains(list(range(1000)), -10)False>>> testlist = (1, 2, 3, 6, 8, 10, 15)>>> contains(testlist, 10)True>>> contains(testlist, 0)False>>> contains(testlist, 20)False

Модуль collections

Модуль collections - предоставляет специализированные типы данных, на основе словарей,кортежей, множеств, списков.

Первым рассматриваемым типом данных будет Counter.

Collections.Counter

collections.Counter - вид словаря, который позволяет нам считать количество неизменяемых объектов (в большинстве случаев, строк). Пример:

>>> import collections>>> c = collections.Counter()>>> for word in ['spam', 'egg', 'spam', 'counter', 'counter', 'counter']: c[word] += 1 >>> cCounter({'counter': 3, 'spam': 2, 'egg': 1})>>> c['counter']3>>> c['collections']0

Но возможности Counter на этом не заканчиваются. У него есть несколько специальных методов:

elements() - возвращает список элементов в лексикографическом порядке.

>>> c = Counter(a=4, b=2, c=0, d=-2)>>> list(c.elements())['a', 'a', 'a', 'a', 'b', 'b']

most_common([n]) - возвращает n наиболее часто встречающихся элементов, в порядке убывания встречаемости. Если n не указано, возвращаются все элементы.

>>> Counter('abracadabra').most_common(3)[('a', 5), ('r', 2), ('b', 2)]

subtract([iterable-or-mapping]) - вычитание

>>> c = Counter(a=4, b=2, c=0, d=-2)>>> d = Counter(a=1, b=2, c=3, d=4)>>> c.subtract(d)Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

Наиболее часто употребляемые шаблоны для работы с Counter:

· sum(c.values()) - общее количество.

· c.clear() - очистить счётчик.

· list(c) - список уникальных элементов.

· set(c) - преобразовать в множество.

· dict(c) - преобразовать в словарь.

· c.most_common()[:-n:-1] - n наименее часто встречающихся элементов.

· c += Counter() - удалить элементы, встречающиеся менее одного раза.

Counter также поддерживает сложение, вычитание, пересечение и объединение:

>>> c = Counter(a=3, b=1)>>> d = Counter(a=1, b=2)>>> c + dCounter({'a': 4, 'b': 3})>>> c - dCounter({'a': 2})>>> c & dCounter({'a': 1, 'b': 1})>>> c | dCounter({'a': 3, 'b': 2})

Следующими на очереди у нас очереди (deque)

Collections.deque

collections.deque(iterable, [maxlen]) - создаёт очередь из итерируемого объекта с максимальной длиной maxlen. Очереди очень похожи на списки, за исключением того, что добавлять и удалять элементы можно либо справа, либо слева.

Методы, определённые в deque:

append(x) - добавляет x в конец.

appendleft(x) - добавляет x в начало.

clear() - очищает очередь.

count(x) - количество элементов, равных x.

extend(iterable) - добавляет в конец все элементы iterable.

extendleft(iterable) - добавляет в начало все элементы iterable (начиная с последнего элемента iterable).

pop() - удаляет и возвращает последний элемент очереди.

popleft() - удаляет и возвращает первый элемент очереди.

remove(value) - удаляет первое вхождение value.

reverse() - разворачивает очередь.

rotate(n) - последовательно переносит n элементов из начала в конец (если n отрицательно, то с конца в начало).

Наши рекомендации