Язык программирования 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.