CSV (Comma-Separated Values, значения, разделенные запятыми) — это простой текстовый формат для табличных данных: одна строка файла = одна строка таблицы, а ячейки внутри строки разделены символом-разделителем. Расширение .csv, внутри — обычный текст, который открывается любым редактором.
Содержание
Ниже разберу, как открыть CSV в Windows в Excel, LibreOffice и Блокноте, почему при открытии появляются кракозябры или все данные слипаются в один столбец, и как читать и писать CSV кодом на Python. Примеры с кодом прогнаны, вывод в статье — реальный.
Что такое CSV и как он устроен
CSV — это текстовый файл, а не бинарный формат вроде .xlsx. Поэтому его можно открыть Блокнотом и увидеть содержимое как есть. Минимальный пример на три строки выглядит так:
name,city,note
Anna,Moscow,junior
Ivan,Perm,middle
Здесь работают три правила, которых достаточно для 90% файлов:
- Разделитель (delimiter) отделяет ячейки в строке. Классический CSV использует запятую, но на практике часто встречается точка с запятой или табуляция — об этом ниже.
- Перевод строки отделяет одну запись от другой.
- Кавычки нужны, когда внутри ячейки есть сам разделитель, кавычка или перенос строки. Такое значение берут в двойные кавычки, а кавычку внутри удваивают:
"любит, кофе","сказал ""ок""".
Формат частично описан стандартом RFC 4180 (2005): разделитель — запятая, перенос строк в стиле Windows (CRLF), необязательная строка заголовка, экранирование двойными кавычками. Но стандарт носит рекомендательный характер, и реальные файлы от него отступают — другой разделитель, другая кодировка, одинарные кавычки. Поэтому «просто открыть CSV» иногда и превращается в проблему.
Важно не путать три близких термина. CSV — разделитель запятая. TSV — разделитель табуляция. DSV — общее название для «значений с произвольным разделителем», куда формально входят и CSV, и TSV. В быту любой такой файл называют «CSV», хотя разделитель внутри может быть любым.
Как открыть CSV в Windows: три инструмента
Выбор зависит от задачи: посмотреть и посчитать — табличный редактор; проверить сырое содержимое и кодировку — текстовый.
| Инструмент | Когда брать | Особенность |
|---|---|---|
| Excel | посчитать, построить сводную, сохранить в .xlsx |
сам угадывает разделитель и кодировку — и часто угадывает неверно |
| LibreOffice Calc | бесплатная альтернатива Excel | при открытии показывает диалог импорта с выбором кодировки и разделителя вручную |
| Блокнот / Notepad++ | проверить сырой текст, разделитель и кодировку | не рисует таблицу, зато показывает файл ровно как он есть |
Excel из пакета Microsoft Office — самый привычный вариант в Windows, но именно он чаще всего портит русские CSV. Причина в том, что Excel пытается определить кодировку и разделитель автоматически. Чтобы этого избежать, файл лучше не открывать двойным кликом, а импортировать.
В Excel 2016 и новее (включая Microsoft 365) путь такой: вкладка Данные -> Получить данные -> Из текста (CSV) (в некоторых сборках пункт называется «Из текста/CSV»). В открывшемся окне Excel показывает предпросмотр и три настройки: кодировка (для русского текста в UTF-8 нужен пункт «65001: Юникод (UTF-8)»), разделитель и распознавание типов. Здесь видно заранее, правильно ли разбились колонки, и можно поправить настройку до загрузки.
LibreOffice Calc проще: при открытии .csv он сам показывает диалог «Импорт текста», где кодировка и разделитель выбираются вручную, а внизу сразу виден результат разбиения. Это удобно, когда файл пришел из неизвестного источника.
Блокнот и Notepad++ таблицу не строят, но незаменимы для диагностики. Если Excel показал кракозябры или один столбец, откройте тот же файл Блокнотом: сразу видно, какой в файле разделитель и не «поехали» ли русские буквы. Notepad++ вдобавок показывает текущую кодировку в строке состояния и умеет ее менять.
Разделитель и кодировка: почему CSV ломается
Две типовые беды при открытии CSV в Windows — «все в одном столбце» и «кракозябры вместо русских букв». У каждой своя причина.
Все данные в одном столбце. Это конфликт разделителей. В русской локали Windows десятичный разделитель — запятая (3,14), поэтому Excel по умолчанию ждет в CSV разделителем колонок не запятую, а точку с запятой. Если файл сделан по классическому стандарту (разделитель — запятая), Excel в русской локали не разобьет его на колонки. И наоборот: файл с ; не разберется там, где Excel ждет ,. Решение — импортировать через диалог и явно указать нужный разделитель, а не открывать двойным кликом.
Кракозябры вместо кириллицы. Это конфликт кодировок. Если файл сохранен в UTF-8, а программа читает его как Windows-1251 (или наоборот), русские буквы превращаются в мусор вроде моÑква. Excel до сих пор часто предполагает Windows-1251 для локальных файлов. Надежный прием — сохранять CSV в кодировке UTF-8 с BOM (BOM — невидимая метка в начале файла): по ней Excel уверенно распознает UTF-8. В коде это кодировка utf-8-sig, в Notepad++ — пункт «UTF-8 (BOM)» в меню «Кодировки».
Мини-правило для Windows: если данные с кириллицей и открываете в Excel — сохраняйте в UTF-8 с BOM и импортируйте через «Из текста (CSV)» с явным разделителем. Это закрывает обе беды разом.
Как читать и писать CSV кодом
Ручное открытие годится, чтобы посмотреть файл. Но CSV — это типовой рабочий формат аналитика: выгрузки из баз, отчеты, данные для моделей приходят именно так, и обрабатывать их удобнее кодом. В Python для этого есть встроенный модуль csv — он сам разбирает кавычки и экранирование, которые легко сломать разбором «в лоб» через split(",").
Полный пример: пишем таблицу в CSV и читаем обратно, включая значения с запятой и кавычками внутри ячейки.
import csv, io
buf = io.StringIO()
writer = csv.writer(buf) # разделитель по умолчанию - запятая
writer.writerow(["name", "city", "note"])
writer.writerow(["Anna", "Moscow", "любит, кофе"]) # запятая внутри значения
writer.writerow(["Ivan", "Perm", 'сказал "ок"']) # кавычки внутри значения
print("Сырой CSV:")
print(buf.getvalue())
buf.seek(0)
reader = csv.DictReader(buf)
for row in reader:
print(row["name"], "->", row["note"])
Вывод программы:
Сырой CSV:
name,city,note
Anna,Moscow,"любит, кофе"
Ivan,Perm,"сказал ""ок"""
Anna -> любит, кофе
Ivan -> сказал "ок"
Обратите внимание: модуль сам взял в кавычки ячейку с запятой и удвоил кавычки внутри сказал "ок", а при чтении вернул исходные значения без искажений. Ради этого и нужен готовый парсер, а не ручной split.
Для файла на диске меняется только источник данных: open("data.csv", "w", newline="", encoding="utf-8-sig") для записи (BOM для дружбы с Excel) и open("data.csv", encoding="utf-8-sig") для чтения. Параметр newline="" при записи обязателен — иначе в Windows появятся лишние пустые строки.
Отдельная частая задача — файл с точкой с запятой из русского Excel. Разделитель задается параметром delimiter:
import csv, io
# Russian Excel по умолчанию пишет разделителем ";" (запятая занята под десятичный разделитель)
data = 'city;temp;note\r\nМосква;-5,5;"снег, ветер"\r\nПермь;-12,0;ясно\r\n'
reader = csv.reader(io.StringIO(data), delimiter=";")
for parts in reader:
print(parts)
Вывод программы:
['city', 'temp', 'note']
['Москва', '-5,5', 'снег, ветер']
['Пермь', '-12,0', 'ясно']
Здесь -5,5 осталось одной ячейкой (запятая внутри — это десятичный разделитель, а не граница колонки), а "снег, ветер" корректно собралось из кавычек, хотя внутри есть запятая. Ровно то место, где ручной разбор ошибся бы.
В реальной аналитике поверх csv обычно берут библиотеку pandas: pandas.read_csv("data.csv", sep=";", encoding="utf-8-sig") возвращает готовую таблицу (DataFrame), с которой сразу считают агрегаты и строят графики. Модуль csv из стандартной библиотеки — это фундамент, а pandas — рабочий инструмент, когда данных много.
Выводы
- CSV — текстовый формат: одна строка = строка таблицы, ячейки разделены разделителем, спорные значения берутся в двойные кавычки (стандарт-ориентир — RFC 4180).
- В Windows CSV открывают Excel или LibreOffice Calc (посчитать) и Блокнотом или Notepad++ (проверить сырой текст и кодировку).
- Две типовые беды — «все в одном столбце» (не тот разделитель) и «кракозябры» (не та кодировка); лечатся импортом через «Из текста (CSV)» с явным разделителем и сохранением в UTF-8 с BOM.
- Обрабатывать CSV программно надежнее готовым парсером: модуль
csvв Python сам разбирает кавычки и экранирование, аdelimiterзадает разделитель.
Где применяется и что учить дальше
CSV — это повседневный формат обмена данными: выгрузки из баз и CRM, отчеты, наборы для обучения моделей чаще всего отдают именно в CSV. Для аналитика уверенная работа с ним — базовый навык: прочитать файл, разобраться с разделителем и кодировкой, привести к таблице и посчитать нужное.
Освойте тему на практике
Если хотите научиться обрабатывать такие данные системно — от чтения CSV и очистки до анализа в pandas и визуализации — посмотрите курс Python для анализа данных. Оценить формат и уровень до старта помогают бесплатные открытые уроки Otus — живые занятия с преподавателями.
Смежные темы: Операции в Windows: копирование документов, Windows и другие ОС: принципы работы.
FAQ
Чем CSV отличается от Excel-файла (.xlsx)? CSV — это простой текст без форматирования, формул и нескольких листов, только значения ячеек. .xlsx — бинарный формат Excel, который хранит стили, формулы и листы. CSV легче и универсальнее для обмена, но не сохраняет оформление.
Как сделать так, чтобы Excel не портил кириллицу при открытии? Сохраняйте файл в кодировке UTF-8 с BOM и открывайте не двойным кликом, а через «Данные -> Получить данные -> Из текста (CSV)», указав кодировку UTF-8 и нужный разделитель вручную.
Можно ли редактировать CSV в Блокноте? Да, это обычный текст: правьте значения и разделители прямо в Блокноте. Только следите за кодировкой при сохранении (для кириллицы — UTF-8) и не добавляйте лишних пробелов вокруг разделителей, если программа-получатель их не ждет.



