100
56
>>> fout.close()
216
Глава 8. Данные должны куда-то попадать
Читаем бинарные файлы
с помощью функции 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
Ввод информации в файлы и ее вывод из них
217
Используем функцию seek(), чтобы перейти к предпоследнему байту файла:
>>> fin.seek(255)
255
Считаем все данные от текущей позиции до конца файла:
>>> bdata = fin.read()