Работа с файлами: JSON и CSV: вопросы для собеседования (часть 2)

Чтение и запись CSV, парсинг JSON, контекстный менеджер with open — повседневные задачи аналитика. На собеседовании могут попросить прочитать CSV без pandas, распарсить вложенный JSON или объяснить разницу между json.load и json.loads. Эти навыки показывают, что кандидат не привязан к одной библиотеке.

Коллекции и структуры данныхГенераторы списков и встроенные функцииЦиклы и условияИсключения и отладкаФункции и аргументыИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных

Вопросы 610 из 20

6Что гарантирует конструкция `with open("data.csv", "r") as f:` при чтении файла?
AФайл будет автоматически создан, если его нет
BФайл будет автоматически закрыт после выхода из блока, даже если внутри возникнет исключение
CФайл целиком загрузится в память автоматически без вызова `f.read()`
DВсегда будет использована кодировка `utf-8` без указания параметров
Ответ: `with` гарантирует корректное закрытие файла после блока.

Контекстный менеджер `with open(...) as f` гарантирует, что файл будет закрыт при выходе из блока `with`, даже если во время чтения или обработки данных произошло исключение. Это снижает риск утечек файловых дескрипторов и проблем с блокировками файлов. Кодировка по умолчанию не фиксируется `with` — её нужно задавать через `encoding=...` при необходимости.

7Что произойдёт при выполнении `open("missing.csv", "r")`, если файла `missing.csv` не существует?
AСоздастся пустой файл и откроется для чтения
BБудет выброшено исключение `FileNotFoundError`
CВернётся `False` и программа продолжит работу
DФайл автоматически откроется в режиме `a`
Ответ: Режим `r` требует, чтобы файл существовал.

При `open("missing.csv", "r")` Python пытается открыть файл для чтения. Если файла нет, это считается ошибкой, и обычно возникает `FileNotFoundError`. Если вам нужно создать файл при отсутствии, используют режим `w` (перезаписать/создать) или `a` (создать/дописать).

8Вы хотели дописать новые строки в существующий файл `report.txt`, но открыли его как `open("report.txt", "w")`. Что произойдёт?
AНовые строки допишутся в конец, старое содержимое останется
BФайл будет очищен и перезаписан с начала (старое содержимое исчезнет)
CБудет ошибка, потому что режим `w` нельзя использовать для текстовых файлов
DФайл откроется только для чтения
Ответ: Режим `w` очищает файл, если он уже существует.

Открытие файла через `open("report.txt", "w")` приводит к перезаписи: содержимое файла обнуляется, и запись начинается заново. Это частая ошибка, когда нужно было дописать в конец. Для дописывания используют `open("report.txt", "a")` (append), а для безопасной работы — обычно в связке с `with`.

9Код: `with open("data.txt", "r", encoding="utf-8") as f: content = f.read()` После выхода из блока вы делаете `f.read()` ещё раз. Что произойдёт?
AФайл уже закрыт, и попытка чтения приведёт к ошибке
BФайл автоматически переоткроется и прочитается снова
CВернётся только первая строка
DВернётся `None`
Ответ: После блока `with` файл закрыт и использовать `f` для чтения нельзя.

`with open(...) as f` закрывает файл сразу после выхода из блока. Поэтому дальнейшие операции ввода-вывода через `f` обычно приводят к ошибке «файл закрыт». Если нужно читать снова, сохраните данные в переменную (`content`) или откройте файл заново во втором `with open(...)`.

10В аналитическом скрипте вы делаете `f = open("out.csv", "w")` и иногда забываете вызвать `f.close()`. Как лучше всего избежать таких ошибок и гарантировать закрытие файла?
AХранить `f` в глобальной переменной, чтобы он не потерялся
BСчитать, что ОС сама закроет файл сразу после `f.write(...)`
CОткрывать файл в режиме `a`, тогда закрывать не нужно
DИспользовать контекстный менеджер: `with open("out.csv", "w", encoding="utf-8", newline="") as f:`
Ответ: Контекстный менеджер `with` гарантирует закрытие файла.

Если открывать файл вручную, легко забыть `f.close()`, особенно если в середине кода есть исключения или ранние `return`. Лучший практический подход — использовать `with open(...) as f`, тогда закрытие файла гарантируется автоматически. Это важно и для корректного сброса данных на диск (flush), и для отсутствия блокировок файла при последующих чтениях/записях.

1234

Хотите тренировать интерактивно?

В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.

Тренировать в Telegram

Другие темы: Python

Коллекции и структуры данныхГенераторы списков и встроенные функцииЦиклы и условияИсключения и отладкаФункции и аргументыИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных