Как починить битый CSV — полное руководство
CSV ломается десятками способов — искажённые символы, съехавшие колонки, фантомные пустые строки, даты, которые неправильно сортируются. Это руководство покрывает все типичные поломки, объясняет, почему это происходит, и показывает, как чинить (вручную и через CSV First Aid).
1. Искажённые символы (проблемы кодировки)
Если видите искажённые последовательности вроде é вместо читаемых символов — файл сохранили в Windows-1252 или Latin-1, а открыли как UTF-8. Это называется mojibake.
Вручную: в Python открыть с encoding='cp1252'. В Excel — через Мастер импорта текста, выбрать '65001: Unicode (UTF-8)' или '1252: Western European' в зависимости от реальной кодировки.
Автоматически: бросьте файл в CSV First Aid. Детектор кодировки находит паттерны Windows-1252 и перекодирует в чистый UTF-8.
2. Заголовок первой колонки начинается с мусора (BOM)
Если первый заголовок выглядит как id или \ufeffid — у файла UTF-8 BOM (Byte Order Mark). Это 3 невидимых байта в позиции 0, которые Excel добавил при сохранении как 'CSV UTF-8'.
Вручную: открыть в hex-редакторе и удалить байты EF BB BF. В Python: open('file.csv', encoding='utf-8-sig').
Автоматически: CSV First Aid убирает BOM на этапе чтения.
3. Данные съехали не в те колонки (битые кавычки)
Когда поле содержит запятую или перевод строки, но не заквочено — парсер разбивает его по нескольким колонкам или строкам. Одна незакрытая кавычка сдвигает каждое следующее поле.
Вручную: найти проблемное поле (ищите непарные кавычки), добавить закрывающую, экранировать внутренние удвоением ("").
Автоматически: толерантный парсер CSV First Aid восстанавливается после незакрытых кавычек и правильно перезаквочивает все поля при экспорте.
4. Всё в одной колонке (неверный разделитель)
Если данные оказались в одной колонке — файл использует разделитель, отличный от ожидаемого. Европейские экспорты часто используют точку с запятой, потому что запятая — десятичный разделитель.
Вручную: переимпортировать с правильным разделителем. В Excel: Данные → Текст по столбцам → С разделителями → выбрать правильный символ. В Pandas: pd.read_csv('file.csv', sep=';').
Автоматически: CSV First Aid определяет разделитель и даёт сконвертировать в любой стандартный формат.
5. Даты сортируются неправильно или неверно интерпретируются
Когда в колонке смешаны форматы (01/03/2024 vs 2024-03-01 vs 1 марта 2024 г.) — сортировка падает, а импорт неправильно интерпретирует даты. 01/02/2024 — это 2 января или 1 февраля?
Вручную: regex-замена или скрипт, парсящий каждый формат и выдающий ISO 8601 (ГГГГ-ММ-ДД).
Автоматически: CSV First Aid определяет смешанные паттерны дат в колонке и нормализует в ISO 8601.
6. Невидимые проблемы (пробелы, NBSP, zero-width)
Самые изматывающие баги CSV — невидимые. Конечные пробелы ломают VLOOKUP. Неразрывные пробелы (NBSP) выглядят как обычные, но не матчатся. Zero-width-символы из веб-скрейпинга молча ломают join-ы.
Вручную: в Python strip() убирает пробелы, но не NBSP. Нужен regex: re.sub(r'[\u00a0\u200b\ufeff]', '', text).
Автоматически: чистильщик невидимых символов плюс триммер пробелов в CSV First Aid обрабатывают всё это за один проход.
7. Пустые строки и висячие переводы
Лишние пустые строки раздувают счётчики, ломают импортёры, ожидающие плотные данные, и создают фантомные NULL-записи в БД.
Вручную: открыть в текстовом редакторе и удалить пустые строки. Осторожно с финальным переводом строки — он валиден по RFC 4180, но многие парсеры создают из него пустую финальную строку.
Автоматически: включить фикс 'Empty rows' в CSV First Aid.
8. Колонка 'Unnamed: 0' (утечка индекса Pandas)
Если видите числовой индекс как первую колонку с заголовком 'Unnamed: 0' — файл создан через df.to_csv() без index=False.
Вручную: pd.read_csv('file.csv', index_col=0) или удалить первую колонку.
Автоматически: CSV First Aid находит и убирает колонку последовательных целых.
Не хочется чинить вручную? Бросьте файл в CSV First Aid — те же проверки запускаются автоматически.
Почините CSV сейчас →Похожие инструменты
Починить кодировку CSV
Видите é, ü, ö вместо é, ü, ö? Файл сохранили в одной кодировке, прочитали в другой. Мы определяем, в какой именно, и конвертируем в UTF-8 — Müller снова выглядит как Müller.
Убрать UTF-8 BOM из CSV
Первая колонка выглядит как 'ID' вместо 'ID'? Это UTF-8 BOM — три невидимых байта, которые оставляет большинство экспортёров. Мы их срезаем, и заголовок снова читается чисто.
Ремонт кавычек CSV
Одна пропущенная закрывающая кавычка превращает одно поле в многострочного монстра и сдвигает все колонки после. Находим незакрытые, закрываем, переэкранируем внутренние — по RFC 4180.
Фиксер разделителей CSV
Европейские экспорты используют точки с запятой. Дампы БД — табы или пайпы. Ваш импорт ждёт запятые. Мы вынюхиваем, что файл реально использует, и переписываем в нужный формат — запятая, точка с запятой, таб или пайп.