Module (29%)
Section (100%)

Основные тезисы


1. Файл должен быть открыт, прежде чем он может быть обработан программой, и должен быть закрыт по завершении обработки.

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

  • read mode – разрешены только операции чтения;
  • write mode – разрешены только операции записи;
  • update mode – разрешены как запись, так и чтение.

2. В зависимости от физического содержимого файла для обработки файлов могут использоваться разные классы Python. В общем, BufferedIOBase может обрабатывать любой файл, а TextIOBase - это специализированный класс, предназначенный для обработки текстовых файлов (т.е. Файлов, содержащих видимые человеку тексты, разделенные на строки с использованием новых -строчные маркеры). Таким образом, потоки можно разделить на бинарные и текстовые.


3. Для открытия файла используется следующий синтаксис функции open():

open(file_name, mode=open_mode, encoding=text_encoding)
Вызов создает объект потока и связывает его с файлом с именем file_name, используя указанный open_mode и задав указанный text_encoding, либо вызывает исключение в случае ошибки.


4. При запуске программы уже открыты три предопределенных потока:

  • sys.stdin – стандартный ввод;
  • sys.stdout – стандартный вывод;
  • sys.stderr – стандартный вывод ошибок.

4. Объект исключения IOError, создаваемый при сбое любых файловых операций (включая операции открытия), содержит свойство с именем errno, которое содержит код завершения неудачного действия. Используйте это значение для диагностики проблемы.



Упражнение 1

Как Вы закодируете значение аргумента функции open() mode, если Вы собираетесь создать новый текстовый файл, чтобы заполнить его только статьей?



Упражнение 2

Что означает значение, представленное errno.EACCES?



Упражнение 3

Каков ожидаемый вывод следующего кода, если предположить, что файла с именем file не существует?

import errno try: stream = open("file", "rb") print("exists") stream.close() except IOError as error: if error.errno == errno.ENOENT: print("absent") else: print("unknown")