Опубликован: 22.12.2005 | Доступ: свободный | Студентов: 16502 / 504 | Оценка: 4.18 / 3.71 | Длительность: 16:16:00
ISBN: 978-5-9556-0109-0
Лекция 2:

Основные стандартные модули Python

Обработка текстов

Модули этой категории будут подробно рассмотрены в отдельной лекции.

Многопоточные вычисления

Модули этой категории станут предметом рассмотрения отдельной лекции.

Хранение данных. Архивация

К этой категории отнесены модули, которые работают с внешними хранилищами данных.

Модуль pickle

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

Модуль pickle позволяет сериализовывать объекты и сохранять их в строке или файле. Следующие объекты могут быть сериализованы:

  • встроенные типы: None, числа, строки (обычные и Unicode).
  • списки, кортежи и словари, содержащие только сериализуемые объекты.
  • функции, определенные на уровне модуля (сохраняется имя, но не реализация!).
  • встроенные функции.
  • классы, определенные на уровне модуля.
  • объекты классов, __dict__ или __setstate__() которые являются сериализуемыми.

Типичный вариант использования модуля приведен ниже.

Сохранение:

import pickle, time
mydata = ("abc", 12, [1, 2, 3])
output_file = open("mydata.dat", "w")
p = pickle.Pickler(output_file)
p.dump(mydata)
output_file.close()

Восстановление:

import pickle
input_file = open("mydata.dat", "r")
mydata = pickle.load(input_file)
print mydata
input_file.close()
Модуль shelve

Для хранения объектов в родном для Python формате можно применять полку (shelve). По своему интерфейсу полка ничем не отличается от словаря. Следующий пример показывает, как использовать полку:

import shelve
data = ("abc", 12)      # - данные (объект)
key = "key"             # - ключ (строка)
filename = "polka.dat"  # - имя файла для хранения полки
d = shelve.open(filename)       # открытие полки
d[key] = data           # сохранить данные под ключом key 
                        # (удаляет старое значение, если оно было)
data = d[key]           # загрузить значение по ключу 
len(d)                  # получить количество объектов на полке
d.sync()                # запись изменений в БД на диске
del d[key]              # удалить ключ и значение
flag = d.has_key(key)   # проверка наличия ключа
lst = d.keys()          # список ключей 
d.close()               # закрытие полки
Модули anydbm и gdbm

Для внешнего хранения данных можно использовать примитивные базы данных, содержащие пары ключ-значение. В Python имеется несколько модулей для работы с такими базами: bsddb, gdbm, dbhash и т.п. Модуль anydbm выбирает один из имеющихся хэшей, поэтому его можно применять для чтения ряда форматов ( any - любой).

Доступ к хэшу из Python мало отличается от доступа к словарю. Разница лишь в том, что хэш еще нужно открыть для создания, чтения или записи, а затем закрыть. Кроме того, при записи хэш блокируется, чтобы не испортить данные.

Модуль csv

Формат CSV (comma separated values - значения, разделенные запятыми) достаточно популярен для обмена данными между электронными таблицами и базами данных. Следующий ниже пример посвящен записи в CSV-файл и чтению из него:

mydata = [(1, 2, 3), (1, 3, 4)]
import csv

# Запись в файл:
f = file("my.csv", "w")
writer = csv.writer(f)
for row in mydata:
    writer.writerow(row)
f.close()

# Чтение из файла:
reader = csv.reader(file("my.csv"))
for row in reader:
    print row
Андрей Егоров
Андрей Егоров

def bin(n):

"""Цифры двоичного представления натурального числа """

if n == 0:

   return []

n, d = divmod(n, 2)

return bin(n) + [d]

print bin(69)

Что значит здесь return[] ? Возвращает список? Непонятно какой список? Откуда он? 

 

 

Асмик Гаряка
Асмик Гаряка

Почему при вычислении рейтинга не учитывается уровень, как описано? Для всех курсов У=1, хотя для Специалист должно быть 2.

Аделина Федорова
Аделина Федорова
Россия, 155900