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

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

Модуль 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

Больше книг — больше знаний!

Заберите 30% скидку новым пользователям на все книги Литрес с нашим промокодом

ПОЛУЧИТЬ СКИДКУ