Читаем Простой Python полностью

Если вы включите символ 'b' в строку режима, файл будет открыт в бинарном режиме. В этом случае вы вместо чтения и записи строк будете работать с байтами.

У нас под рукой нет бинарного стихотворения, поэтому мы просто сгенерируем 256 байтовых значений от 0 до 255:

>>> bdata = bytes(range(0, 256))

>>> len(bdata)

256

Откроем файл для записи в бинарном режиме и запишем все данные сразу:

>>> fout = open('bfile', 'wb')

>>> fout.write(bdata)

256

>>> fout.close()

И вновь функция write() возвращает количество записанных байтов.

Как и в случае с текстом, вы можете записывать бинарные данные фрагментами:

>>> fout = open('bfile', 'wb')

>>> size = len(bdata)

>>> offset = 0

>>> chunk = 100

>>> while True:

…·····if offset > size:

…··········break

…·····fout.write(bdata[offset: offset+chunk])

…·····offset += chunk

100

100

56

>>> fout.close()

Читаем бинарные файлы с помощью функции read()

Это просто: все, что вам нужно, — открыть файл в режиме 'rb':

>>> fin = open('bfile', 'rb')

>>> bdata = fin.read()

>>> len(bdata)

256

>>> fin.close()

Закрываем файлы автоматически с помощью ключевого слова with

Если вы забудете закрыть за собой файл, его закроет Python после того, как будет удалена последняя ссылка на него. Это означает, что, если вы откроете файл и не закроете его явно, он будет закрыт автоматически по завершении функции. Но вы можете открыть файл внутри длинной функции или даже основного раздела программы. Файл должен быть закрыт, чтобы все оставшиеся операции записи были завершены.

У Python имеются менеджеры контекста для очистки объектов вроде открытых файлов. Вы можете использовать конструкцию with выражение as переменная

:

>>> with open('relativity', 'wt') as fout:

…·····fout.write(poem)

Вот и все. После того как блок кода, расположенный под менеджером контекста (в этом случае одна строка), завершится (или нормально, или путем генерации исключения), файл будет закрыт автоматически.

Меняем позицию с помощью функции seek()

По мере чтения и записи Python отслеживает ваше местоположение в файле. Функция tell() возвращает ваше текущее смещение от начала файла в байтах. Функция seek() позволяет вам перейти к другому смещению в файле. Это значит, что вам не обязательно читать каждый байт файла, чтобы добраться до последнего, — вы можете использовать функцию seek(), чтобы сместиться к последнему байту и считать его.

Для примера воспользуемся 256-байтным бинарным файлом 'bfile', который мы создали ранее:

>>> fin = open('bfile', 'rb')

>>> fin.tell()

0

Используем функцию seek(), чтобы перейти к предпоследнему байту файла:

>>> fin.seek(255)

255

Считаем все данные от текущей позиции до конца файла:

>>> bdata = fin.read()

>>> len(bdata)

1

>>> bdata[0]

255

Функция seek() также возвращает текущее смещение.

Вы также можете вызвать функцию seek(), передав ей второй аргумент: seek(offset, origin):

• если значение origin равно 0 (по умолчанию), сместиться на offset байт с начала файла;

• если значение origin равно 1, сместиться на offset байт с текущей позиции;

• если значение origin равно 2, сместиться на offset байт с конца файла.

Эти значения также определены в стандартном модуле os:

>>> import os

>>> os.SEEK_SET

0

>>> os.SEEK_CUR

1

>>> os.SEEK_END

2

Благодаря этому мы можем считать последний байт разными способами:

>>> fin = open('bfile', 'rb')

Один байт перед концом файла:

>>> fin.seek(-1, 2)

255

>>> fin.tell()

255

Считать данные до конца файла:

>>> bdata = fin.read()

>>> len(bdata)

1

>>> bdata[0]

255


Вам не нужно вызывать функцию tell(), чтобы работала функция seek(). Я только хотел показать, что обе эти функции возвращают одинаковое смещение.


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

>>> fin = open('bfile', 'rb')

Следующий пример переносит позицию за 2 байта до конца файла:

>>> fin.seek(254, 0)

254

>>> fin.tell()

254

Теперь перейдем вперед на 1 байт:

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Искусство управления IT-проектами
Искусство управления IT-проектами

В отличие от множества трудов, посвященных руководству проектами и командами, в этой книге не проповедуются никакие новые учения и не превозносятся великие теории. Скотт Беркун считает залогом успеха практику и разнообразие подходов. В книге описываются основные сложности и проблемные ситуации, возникающие в работе менеджера проекта, даны рекомендации по выходу из них.Издание предназначено не только для лидеров команд и менеджеров высшего звена, но и для программистов, тестеров и других исполнителей конкретных проектных заданий. Также оно будет полезно студентам, изучающим бизнес-менеджмент, проектирование изделий или программную инженерию.Текст нового издания значительно переработан автором с целью добиться большей ясности, кроме того, книга дополнена новым приложением и более чем 120 практическими упражнениями.

Скотт Беркун

Деловая литература
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги

3ds Max 2008
3ds Max 2008

Одни уверены, что нет лучшего способа обучения 3ds Мах, чем прочитать хорошую книгу. Другие склоняются к тому, что эффективнее учиться у преподавателя, который показывает, что и как нужно делать. Данное издание объединяет оба подхода. Его цель – сделать освоение 3ds Мах 2008 максимально быстрым и результативным. Часто после изучения книги у читателя возникают вопросы, почему не получился тот или иной пример. Видеокурс – это гарантия, что такие вопросы не возникнут: ведь автор не только рассказывает, но и показывает, как нужно работать в 3ds Мах.В отличие от большинства интерактивных курсов, где работа в 3ds Мах иллюстрируется на кубиках-шариках, данный видеокурс полностью практический. Все приемы работы с инструментами 3ds Мах 2008 показаны на конкретных примерах, благодаря чему после просмотра курса читатель сможет самостоятельно выполнять даже сложные проекты.

Владимир Антонович Верстак , Владимир Верстак

Программирование, программы, базы данных / Программное обеспечение / Книги по IT