Ниже представлен тест по информатике для 10 класса на тему: Операции с файлами и пакетами. Тип вопросов — открытый. Всего 5 вопросов. В конце каждого вопроса даны примеры ответов.
- Вопрос 1
Объясните различия между текстовыми и двоичными файлами. Какие режимы открытия файла в Python существуют для чтения и записи текстовых и двоичных данных? Как кодировка влияет на обработку текстовых файлов? Что произойдет, если открыть несуществующий файл в режиме 'r' и в режиме 'w'? Приведите примеры кода.
Ответ:
- Текстовые файлы содержат текстовую информацию и работают с кодировкой (например UTF-8). Двоичные файлы содержат сырые байты и не применяют кодировку к данным.
- В Python режимы: для чтения и записи текстовых данных: 'r' (чтение), 'w' (запись с обнулением), 'a' (добавление), также 'x' для эксклюзивного создания. Для двоичных данных добавляются суффиксы 'b': 'rb', 'wb', 'ab', 'xb'. По умолчанию режим текстовый ('t'), можно явно указать 'rt' или 'wt'.
- Кодировка влияет на преобразование байтов в строки и обратно. При чтении текстового файла данные декодируются в строки согласно указанной кодировки (например encoding='utf-8'). При записи строки кодировка применяется к байтам.
- Поведение при открытии несуществующего файла:
- 'r': FileNotFoundError (файл не существует).
- 'w': создаётся новый файл (если не существует) и файл пустится (текущие данные будут удалены).
- Примеры кода:
Текстовый файл — запись
with open('example.txt', 'w', encoding='utf-8') as f:
f.write('Привет, мир!\n')
Текстовый файл — чтение
with open('example.txt', 'r', encoding='utf-8') as f:
s = f.read()
Двоичный файл — запись
with open('data.bin', 'wb') as f:
f.write(b'\xDE\xAD\xBE\xEF')
Двоичный файл — чтение
with open('data.bin', 'rb') as f:
data = f.read()
- Вопрос 2
Опишите методы чтения файла при работе с большими файлами: по строкам, по блокам, через чтение всего файла. Какие преимущества у каждого метода? Напишите примеры кода на Python, показывающие чтение файла построчно и чтение по блокам 4096 байт.
Ответ:
- Чтение по строкам (итератор по файлу): читает файл построчно, экономит память, подходит для обработки больших текстовых файлов.
- Чтение по блокам (функция read с заданным размером): считывает данные порциями фиксированного размера (байты или символы). Подходит для бинарных файлов или когда нужно контролировать размер буфера.
- Чтение всего файла сразу: читает все данные в память. Подходит только для небольших файлов; небезопасно для больших.
- Примеры кода:
Построчное чтение (память экономится)
with open('large.txt', 'r', encoding='utf-8') as f:
for line in f:
process(line) # ваша обработка
Чтение по блокам (например, 4096 байт)
with open('large.bin', 'rb') as f:
while True:
chunk = f.read(4096)
if not chunk:
break
process_bytes(chunk)
Чтение всего файла (не рекомендуется для больших файлов)
with open('small.txt', 'r', encoding='utf-8') as f:
all_text = f.read()
- Вопрос 3
Что такое пакет (package) в Python? Чем он отличается от модуля? Как создать пакет, какие файлы необходимы, как импортировать модули внутри пакета, как выполнять относительный импорт? Приведите пример простой структуры пакета и импортов.
Ответ:
- Модуль — файл .py, содержащий код (функции, классы и т.д.).
- Пакет — директория, которая содержит модуль(и) и файл init.py; пакет позволяет организовать модули в иерархию и импортировать их как целостную единицу.
- Необходимо: создать директорию пакета, внутри поместить файлы модулей и файл init.py (можно пустой). Файл init.py делает директорию пакетом и может выполнять инициализацию.
- Импорт внутри пакета и относительные импорты:
- Внешний/абсолютный импорт: import my_pkg.util as util, from my_pkg.subpkg import io
- Внутренний/относительный импорт внутри пакета: from . import helper или from ..parent import something
- Пример структуры:
Проект:
my_pkg/
init.py
util.py
subpkg/
init.py
io.py
Пример использования:
import my_pkg.util as util
from my_pkg.subpkg import io
util.some_function()
io.read_data()
Примечание: чтобы пакет был доступен, родительский каталог (где находится my_pkg) должен находиться в sys.path или пакет должен быть установлен в окружение.
- Вопрос 4
Операции с путями и файловой системой: как с помощью Python создать директорию, проверить её существование, скопировать/переместить файл, удалить файл или директорию. Приведите пример использования pathlib для этих задач.
Ответ:
- Создание директории: Path.mkdir(...)
- Проверка существования: Path.exists() или Path.is_dir()
- Копирование/перемещение файлов: shutil.copy2(...) и shutil.move(...)
- Удаление: Path.unlink() для файла, rmdir() или shutil.rmtree() для директорий
- Пример с использованием pathlib и shutil:
from pathlib import Path
import shutil
создать директорию
backup_dir = Path('backup')
backup_dir.mkdir(exist_ok=True)
копировать файл в директорию backup
src = Path('data.txt')
if src.exists():
shutil.copy2(src, backup_dir / src.name)
переместить файл в другую директорию
dest_dir = Path('archive')
dest_dir.mkdir(exist_ok=True)
source_file = Path('log.txt')
if source_file.exists():
shutil.move(str(source_file), dest_dir / source_file.name)
удалить файл
to_delete = Path('old.txt')
if to_delete.exists():
to_delete.unlink()
удалить не пустую директорию
to_remove = Path('tmp_dir')
if to_remove.exists():
shutil.rmtree(to_remove)
- Вопрос 5
Обработка ошибок и менеджеры контекста при работе с файлами: зачем использовать with; какие исключения нужно обрабатывать; напишите пример чтения файла с обработкой FileNotFoundError и PermissionError.
Ответ:
- Менеджер контекста with гарантирует закрытие файла после выполнения блока кода, даже если произошла ошибка.
- В работе с файлами часто возникают исключения FileNotFoundError (файл не найден), PermissionError (нет прав доступа), OSError/IOError и другие.
- Пример с обработкой исключений:
try:
with open('config.txt', 'r', encoding='utf-8') as f:
data = f.read()
except FileNotFoundError:
print('Файл не найден: config.txt')
except PermissionError:
print('Недостаточно прав для чтения config.txt')
except OSError as e:
print(f'Ошибка ввода-вывода: {e}')
else:
# обработка data, если файл успешно считан
process_config(data)
Примечание для учителя/проверяющего:
- Можно допустить небольшие вариации формулировок и примеры кода, главное, чтобы ответы демонстрировали понимание различий между текстовыми и двоичными файлами, работа с режимами, чтение больших файлов, структура пакетов, манипуляции путями через pathlib и обработку ошибок.