Работа с файлами: JSON и CSV: вопросы для собеседования (часть 4)
Чтение и запись CSV, парсинг JSON, контекстный менеджер with open — повседневные задачи аналитика. На собеседовании могут попросить прочитать CSV без pandas, распарсить вложенный JSON или объяснить разницу между json.load и json.loads. Эти навыки показывают, что кандидат не привязан к одной библиотеке.
Вопросы 16–20 из 20
16У вас есть объект `rows` (например, список словарей). Как корректно сохранить его в файл `result.json`?
A`with open("result.json", "w", encoding="utf-8") as f: f.write(rows)`
B`with open("result.json", "w", encoding="utf-8") as f: f.write(json.loads(rows))`
C`with open("result.json", "w", encoding="utf-8") as f: json.dumps(f, rows)`
D`with open("result.json", "w", encoding="utf-8") as f: f.write(json.dumps(rows))`
Ответ: `json.dumps()` делает строку JSON, которую затем можно записать в файл.
Чтобы сохранить Python-объект в JSON-файл, сначала сериализуйте его в строку через `json.dumps(rows)`, а затем запишите строку в файл (открытый в режиме `w`). `f.write(...)` ожидает строку, поэтому запись «как есть» объекта `rows` не подходит. В аналитике это типичный шаг при сохранении результатов расчётов в переносимый формат.
17В коде `with open("out.txt", "w", encoding="utf-8") as f: n = f.write("OK")` чему будет равна `n`?
AБулево значение `True`, если запись успешна
BОбъект файла `f`
CКоличество записанных символов (для `f.write("OK")` это 2)
DСама строка `"OK"`
Ответ: `f.write(...)` возвращает число записанных символов.
Метод `f.write(text)` записывает текст в файл и возвращает количество записанных символов. Это может быть полезно, если вы хотите быстро проверить, что запись действительно произошла. В примере `f.write("OK")` запишет два символа, поэтому `n` будет равна 2.
18В файле `events.json` лежит JSON-текст. Как получить Python-объект из этого файла?
A`obj = json.dumps(open("events.json", "r", encoding="utf-8"))`
B`obj = json.loads(open("events.json", "r", encoding="utf-8"))`
C`with open("events.json", "r", encoding="utf-8") as f: obj = json.loads(f.read())`
D`with open("events.json", "w", encoding="utf-8") as f: obj = json.loads(f.read())`
Ответ: Сначала читаем текст, затем делаем `json.loads()`.
`json.loads()` ожидает JSON-текст (строку), поэтому типичный путь: открыть файл в режиме чтения (`r`), прочитать содержимое через `f.read()`, а затем вызвать `json.loads(...)`. Контекстный менеджер `with` гарантирует закрытие файла. Это помогает не перепутать «JSON-строку» и «Python-объект»: файл хранит текст, а `json.loads()` превращает его в структуру данных.
19Вы сериализуете объект в JSON и хотите, чтобы кириллица в результате была читаемой, а не в виде `\uXXXX`. Какой вызов лучше?
A`json.dumps(obj)`
B`json.loads(obj)`
C`json.dumps(obj, ensure_ascii=True)`
D`json.dumps(obj, ensure_ascii=False)`
Ответ: Параметр `ensure_ascii=False` сохраняет не-ASCII символы как есть.
По умолчанию `json.dumps(obj)` часто экранирует не-ASCII символы (кириллицу) в виде последовательностей вроде `\uXXXX`. Если вы хотите получить читаемый JSON, используйте `json.dumps(obj, ensure_ascii=False)`. При записи в файл дополнительно важно открыть его с `encoding="utf-8"`, чтобы текст был сохранён корректно.
20Почему при чтении CSV через модуль `csv` часто пишут `open("data.csv", "r", encoding="utf-8", newline="")`?
AЧтобы `csv` корректно обрабатывал переводы строк и не создавал лишние пустые строки/сдвиги
BЧтобы автоматически преобразовывать все числа в `int`
CЧтобы `csv.reader` автоматически пропускал строку заголовка
DЧтобы включить режим добавления данных `a`
Ответ: Параметр `newline=""` помогает модулю `csv` правильно обрабатывать строки.
Модуль `csv` ожидает, что управление переводами строк будет сделано корректно, поэтому часто рекомендуют открывать файл с `newline=""`. Это особенно полезно для кроссплатформенной работы, чтобы избежать лишних пустых строк или некорректного разбиения строк при чтении/записи CSV. Также обычно задают `encoding="utf-8"`, чтобы одинаково читать файлы с не-ASCII символами.
Хотите тренировать интерактивно?
В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.
Тренировать в Telegram