Кодировщики и декодировщики
Класс 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 отрицательно, то с конца в начало).