Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Основы алгоритмизации и программирования на Python

Запись информации в двоичный файл

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

мат Вид Справка

представлена на рис. 145. г

avto.dat — Блокнот

Файл Правка Фор

PiP’q Х? PHPePiCfP»Peq7XJ 1967q-h-e.

|B-]q (X PIPSP»

Рис. 145. Содержимое бинарного файла, открытого в редакторе Блокнот

В Python существует такое понятие, как консервация данных. Она позволяет хранить в файлах не просто набор символов, а более сложные структуры, например, списки или словари. Такое представление данных позволяет получить представление некоторого объекта в виде набора байтов, причем, сохраненный и переданный на другой компьютер, такой набор может быть расконсервирован, т. е. восстановлен.

Для совершения всех этих операций, в Python предусмотрены два модуля: модуль pickle (от англ, pickling - консервация) и модуль shelve (от англ. shelving - стеллаж, размещение на полках). Соответственно, первый метод позволяет консервировать структуры данных, а второй метод - осуществить доступ к объектам, хранящихся «на полках».

Для того чтобы записать информацию в бинарный файл, его требуется открыть функцией open, синтаксис которой следующий:

Файловая переменная=ореп (FileName, Mode)

Где:

Файловая переменная - переменная, в которой будет находиться значение, возвращенное функцией open;

FileName - представляет собой путь к открываемому файлу;

Mode - режим доступа. Может принимать значения, представленные в табл. 9.

Таблица 9. Возможные значения режима Mode функции ореп() при работе с бинарными файлами

Значение

Описание

"rb"

Чтение информации из файла. Если файл не существует, возникает исключение ЮЕггог

"wb"

Запись информации в файл. Если файл существует, его содержимое полностью заменится; если файл не существует, он будет создан

"ab"

Дозапись в двоичный (бинарный) файл. Если файл существует, новые данные будут дописаны в конец. Если файл не существует, он будет создан

"rb+"

Чтение и запись в двоичный (бинарный) файл. Если файл не существует, возникает исключение ЮЕггог

"wb+"

Чтение и запись из двоичного (бинарного) файла. Если файл существует, он будет перезаписан. Если файл не существует, он будет создан

"ab+"

Дозапись и чтение из двоичного (бинарного) файла. Если файл существует, новые данные будут дописаны в конец. Если файл не существует, он будет создан

Второе действие, выполняемое над бинарным файлом, заключается в непосредственной записи информации в файл. Запись осуществляется с помощью метода dump(), имеющего следующий синтаксис:

pickle.dumpCiaHHbie, файловаяпеременная)

Задача 1. Разработайте базу данных, содержащую сведения об автомобилях. О каждом автомобиле известно следующее:

  • • марка автомобиля;
  • • цвет автомобиля;
  • • год выпуска автомобиля.

Требуется создать:

  • • файл с законсервированной информацией обо всех автомобилях;
  • • осуществить чтение и расконсервацию данных из файла;
  • • создать новый файл, в котором организовать размещение списков на полках и осуществить вывод хранящейся информации по указанному пользователем автомобилю.

Комментарий. В самом начале программы мы создадим три списка avtol, avto2, avto3 в которых находятся сведения о каждом автомобиле: марка, цвет и год выпуска. Четвертый список avto4 создадим в диалоговом режиме. Далее, оператором zap=open("avto.dat","wb") открывается файл с именем avto.dat на запись двоичной информации, на что указывает режим Mwb" (см. табл. 9). С помощью последующих четырех методов dumpO происходит так называемая сериализация объектов (последовательность перевода какой-либо структуры данных в последовательность битов).

В следующей части программы происходит расконсервация данных. Она основана на применении функции load(), которая читает данные из файла и преобразовывает их в объект. Ее синтаксис следующий:

Имя_переменной=ріск1е.1оагі(имя_файловой_переменной)

В один файл можно сохранить сразу несколько объектов, что и происходит в программе. Далее оператором print выводим списки автомобилей на экран. Код программы представлен в листинге 139.

import pickle

avto 1 =["Волга","Белый"," 1970"] ауЮ2=["Жигули", "Красный", "1980"] ауЮЗ=["Победа","Зеленый"," 1950"] тагка=три!("пВведите марку автомобиля ") со1ог=три1("пВведите цвет автомобиля ") god=input(" BBeflHTe год автомобиля ") avto4=[marka, color, god] zap=open("avto.dat","wb") pickle.dump(avtol,zap) #консервация данных pickle.dump(avto2,zap) pickle.dump(avto3,zap) pickle.dump(avto4,zap) zap.close()

#................................

zap=open("avto.dat","rb+")

avto 1 =pickle.load(zap) #расконсервация данных

avto2=pickle.load(zap)

avto3=pickle.load(zap)

avto4=pickle.load(zap)

print(avtol)

print(avto2)

print(avto3)

print(avto4)

zap.closeQ_

На рис. 146 представлена информация, извлеченная из файла avto.dat.

Python 3.5.1 (v3.5.1:37а07сее5969, Dec 5 2015, 21:12:44)

[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darvuin

Type "copyright", "credits" or "licenseO" for more information.

»> WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable.

Visit http://vwitt.python.org/download/mac/tcltk/ for current information

— RESTART: /Volumes/KINGSTON/Консервация авто с добавлением элементов.

py —

Введите марку автомобиля Тойота

Введите цвет автомобиля Белый

Введите год автомобиля 1985 ['Волга', 'Белый', '1970']

['Жигули', 'Красный' , '1980']

['Победа', 'Зеленый', '1950']

['Тойота', 'Белый', '1985']

»>

Рис. 146. Данные об автомобилях

Создадим новый проект Python и, подключив модуль shelve, откроем файл avtol.dat с помощью функции open. Использование оператора shelve.open предполагает наличие файла с консервированными объектами.

Теперь мы можем вывести данные по каждому автомобилю, запросив, например, его название. Полка (polka) подобна словарю, и сведения, хранящиеся на полке, доступны по соответствующему ключу: "avtol", "avto2", "avto3", "avto4".

Подобно банкам с консервированными огурцами, которые хозяйка размещает для хранения на полках в кухонном шкафу, мы разместим сведения о каждом из автомобилей на виртуальных полках. Поэтому спискам было решено дать соответствующие имена: polka["avtol"], polka["avto2"] и polka["avto3"],

polka["avto4"]. Как в словаре, каждому значению, хранящемуся на полке, соответствует ключ, который записывается в квадратных скобках: "avtol", "avto2", "avto3", "avto4". С помощью метода sync() объекта-полки, осуществляется запись данных. Код программы представлен в листинге 140.

Листинг 140

import shelve

polka=shelve.open("avto 1 .dat") polka["avto 1 "]=["Волга",'"Белый"," 1970"] ро1ка["а*о2"]=["Жигули", "Красный", "1980"] ро1ка["ауЩЗ"]=["Победа","Зеленый", "1950"] тагка=три1("пВведите марку автомобиля ") со1ог=триД"пВведите цвет автомобиля ") god=input(" Bвeдитe год автомобиля ") polka["avto4"]=[marka, color, god] polka.sync()

#----------------------------------

тагка=три!("пВведите марку автомобиля ") if тагка=="Волга":

print("Данные по машине",marka, polka["avtol"]) if тагка=="Жигули":

ргт1("Данные по машине",marka,polka["avto2"]) if тагка=="Победа":

ргт1("Данные по машине",marka,polka["avto3"]) if тагка=="Тойота":

ргт1("Данные по машине",marka,polka["avto4"]) polka.closeQ_

Запрос по автомобилю «Тойота» представлен на рис. 147.

Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)

! [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "copyright", "credits" or "licenseO" for more information.

| ——————— RESTART: /Volumes/KINGSTON/polki_avto.py

Введите марку автомобиля Тойота Введите цвет автомобиля Белый Введите год автомобиля 1985 Введите марку автомобиля Тойота

Данные по машине Тойота ['Тойота', 'Белый', '1985'] »>

Рис. 147. Результаты запроса

 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Пред   СОДЕРЖАНИЕ   След >
 

Популярные страницы