Почему при чтении CSV через модуль csv часто пишут open("data.csv", "r", encoding="utf-8", newline="")?
AЧтобы автоматически преобразовывать все числовые значения в
int и float при чтении из файлаBЧтобы модуль
csv корректно обрабатывал переводы строк и не создавал лишних пустых строк или сдвиговCЧтобы
csv.reader автоматически пропускал первую строку файла, считая её строкой заголовка таблицыDЧтобы включить режим добавления данных в конец файла без перезаписи прежнего содержимого, как
mode="a"Правильный ответ. Параметр
newline="" помогает модулю csv правильно обрабатывать концы строк независимо от платформы.Разбор
Модуль csv сам обрабатывает символы перевода строки внутри значений и между записями, поэтому ожидает, что файл откроют с newline="". Иначе на разных платформах (Windows/Linux) возможны лишние пустые строки или некорректное разбиение многострочных полей в кавычках. Параметр encoding="utf-8" нужен отдельно — чтобы одинаково читать файлы с не-ASCII символами. Параметр newline="" не отвечает ни за пропуск заголовка (это делает next(reader) или csv.DictReader), ни за приведение типов, ни за режим записи.
Проверь себя · 1/3разбор после ответа
Вы сохраняете результат анализа в файл отчёта. Что произойдёт, если выполнить
open("report.csv", "w"), когда report.csv уже существует?Ещё вопросы по теме «Работа с файлами: JSON и CSV»
- Вы сохраняете результат анализа в файл отчёта. Что произойдёт, если выполнить `open("report.csv", "w")`, когда `report.csv` уже существует?
- Что гарантирует конструкция `with open("data.csv", "r") as f:` при чтении файла в Python?
- Есть строка `text = '{"user_id": 7, "active": true}'`. Что вернёт `json.loads(text)`?
- Вы читаете CSV с заголовком через `csv.DictReader(f)`. Что представляет собой `row` внутри цикла `for row in csv.DictReader(f):`?
- Вы хотите дописывать строки в файл лога `errors.log`, не удаляя то, что уже записано. Как открыть файл?
- Все вопросы по «Работа с файлами: JSON и CSV» →