Вы сохраняете результат анализа в файл отчёта. Что произойдёт, если выполнить open("report.csv", "w"), когда report.csv уже существует?
Чтение и запись CSV, парсинг JSON, контекстный менеджер with open — повседневные задачи аналитика. На собеседовании могут попросить прочитать CSV без pandas, распарсить вложенный JSON или объяснить разницу между json.load и json.loads. Эти навыки показывают, что кандидат не привязан к одной библиотеке.
Всего в этом разделе 20 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 4 части по 5 вопросов.
1Вы читаете `products.csv` через `csv.DictReader(f)` и получили строку `row`. Как правильно взять значение столбца `price`?
A`row["price"]`: доступ по имени столбца через ключ словаря у `csv.DictReader`
B`row[1]`: доступ по числовому индексу столбца, как в обычном `list` или `csv.reader`
C`row.price`: доступ как к атрибуту объекта через точку, через имя поля
D`row.get(1)`: словарный метод `.get()` с числовым индексом вместо имени столбца
Ответ: У `csv.DictReader` доступ к полям идёт по имени столбца как к ключу словаря.
`csv.DictReader` возвращает для каждой строки словарь, где ключи — названия столбцов из заголовка. Поэтому значение поля `price` берут как `row["price"]`. Числовой индекс работает у обычного `csv.reader`, но не у `DictReader`. Помните, что значения приходят строками, и для расчётов цену часто нужно преобразовать, например через `float(...)`.
2Вы хотите дописывать строки в файл лога `errors.log`, не удаляя то, что уже записано. Как открыть файл?
A`open("errors.log", "a")`
B`open("errors.log", "w")`
C`open("errors.log", "r")`
D`open("errors.log", "r+")`
Ответ: Режим `a` добавляет данные в конец файла.
Если нужно сохранять историю и дописывать новые строки, используйте режим `a` (append): `open("errors.log", "a")`. В этом режиме запись идёт в конец, а если файла ещё нет, он будет создан. Режим `w` перезапишет файл (очистит), а режим `r` предназначен только для чтения.
3Есть словарь `cfg = {"threshold": 0.8}`. После `s = json.dumps(cfg)` что хранится в `s`?
AТот же словарь `cfg` типа `dict` без каких-либо преобразований над содержимым
BJSON-строка вида `'{"threshold": 0.8}'` типа `str` с сериализованным содержимым
CСписок ключей словаря `['threshold']` типа `list` без значений сериализации
DОткрытый файл `cfg.json`, в который записан сериализованный JSON
Ответ: `json.dumps()` сериализует объект и возвращает JSON в виде строки.
`json.dumps(cfg)` сериализует Python-объект и возвращает JSON в виде строки (тип `str`). Это удобно, когда нужно сохранить результат в файл через `f.write(...)` или отправить по сети. Обратная операция — `json.loads(...)`, которая принимает строку JSON и возвращает объект (например, словарь). Чтобы сразу записать в файл, используют `json.dump(cfg, f)` (без `s`).
4Вы сохраняете результат анализа в файл отчёта. Что произойдёт, если выполнить `open("report.csv", "w")`, когда `report.csv` уже существует?
AФайл откроется на запись и очистится: старое содержимое удалится, запись пойдёт с начала
BНовые данные допишутся в конец файла, старое содержимое останется без изменений
CБудет выброшено исключение, поскольку режим запрещает работу с уже существующим файлом
DФайл откроется только для чтения, попытка записи выбросит ошибку режима доступа
Ответ: Режим `w` создаёт файл для записи или очищает существующий.
Если открыть файл через `open("report.csv", "w")`, Python откроет его в режиме записи. Если файл уже существует, его содержимое будет обнулено (перезаписано с начала). Этот режим подходит для «пересборки» отчёта с нуля. Если нужно дописывать в конец, используют режим `a`.
5Вы используете `csv.reader` для чтения файла. Что такое `row` в цикле `for row in csv.reader(f):`?
AСловарь с названиями столбцов в качестве ключей и значениями полей текущей строки
BОдна строка файла целиком как объект типа `str` без разбиения на столбцы CSV
CКортеж из двух элементов: номер строки в файле и её исходный текстовый вид
DСписок строковых значений по столбцам, представляющий поля одной строки CSV
Ответ: `csv.reader` возвращает каждую строку как список полей.
Итерация по `csv.reader(f)` возвращает каждую строку CSV как список значений по столбцам. Обычно все элементы — строки, поэтому для аналитики часто требуется явное преобразование типов (например, `int(...)` или `float(...)`). Если нужен доступ по имени столбца, вместо `csv.reader` выбирают `csv.DictReader`.