Очистка и исправление CSV

Очистить CSV: убрать пустые строки и колонки, удалить строки-дубликаты, обрезать пробелы в ячейках, нормализовать кавычки, найти строки с неверным числом колонок и сменить разделитель. Всё считается в браузере.

Что исправляем

Определяется по первой строке файла

Чем разделены поля в готовом файле

Отсчёт по первой строке файла; её же задаёт заголовок. Номера — как в исходном файле

Строки и колонки
Убрать пустые строкиСтрока, в которой нет ни одного непустого значения, выкидывается целиком
Убрать пустые колонкиКолонка, пустая во всех строках. Заголовок тоже должен быть пустым
Удалить строки-дубликатыИз одинаковых остаётся первая; заголовок не считается дубликатом
Ячейки
Обрезать пробелы в ячейкахКрая каждой ячейки, включая содержимое кавычек. Внутренние пробелы не трогаются
Убрать пробелы вокруг разделителейРаботает по исходному тексту до разбора: « , » становится «,». Значения в кавычках сохраняют отступы
Нормализовать кавычки (всегда двойные)Поле, целиком взятое в одинарные кавычки, теряет их; в кавычки двойные значение берётся только там, где без них оно развалится
Удалить управляющие символыМусор от чужой кодировки. Табуляция и переводы строки остаются
Удалить BOMНевидимый символ в начале файла: из-за него первый заголовок не находится по имени. Снятый флажок оставляет BOM в результате

Исходный CSV

Результат

Зачем чистить CSV

CSV выглядит простым форматом до первой попытки его загрузить. Разделитель у каждой программы свой, кавычки расставляются по-разному, в конце файла стоят пустая строка и лишний разделитель, а перед первым заголовком — BOM. Импорт разбирает всё это буквально: пустая строка становится пустой записью, дубликат — вторым экземпляром, пробел перед значением — частью значения. Ошибку видно уже в базе или в отчёте, когда исходный файл давно закрыт.

Инструмент разбирает CSV, применяет к нему выбранные правки и собирает файл заново уже аккуратным: убирает пустые строки и колонки, находит дубликаты, чистит пробелы и управляющие символы, снимает одинарные кавычки, ловит строки с неверным числом колонок и меняет разделитель. Отчёт рядом с результатом показывает, что именно было исправлено и под какими номерами — по нему видно, что файл был не в порядке, а не инструмент испортил данные.

Разбор и сборка идут в браузере: файл читается с диска и никуда не отправляется. Порядок строк и колонок сохраняется, поэтому результат можно сравнить с исходником и убедиться, что изменилось ровно то, что вы выбрали.

Частые вопросы

Зачем чистить CSV перед загрузкой в базу или Excel?

Импорт разбирает файл строго: лишняя пустая строка превращается в запись из одних пустых полей, дубликат — в повторную запись, ключ которой может конфликтовать с уже загруженной, а пробел в начале значения — в отдельный город « Москва» рядом с «Москва». BOM делает первый заголовок невидимо другим, и колонка «id» не находится по имени. Всё это ломает не файл, а уже загруженные данные, поэтому дешевле привести CSV в порядок до загрузки.

Почему появляются строки с лишним или недостающим числом колонок?

Две причины. Первая — разделитель внутри значения, которое не взяли в кавычки: адрес «Москва, Тверская, 1» с запятой превращается в три поля вместо одного. Вторая — редакторы и выгрузки: при ручной правке файла в блокноте строку легко потерять или дописать поле. Такие строки инструмент находит и показывает их номера в отчёте, а что с ними делать, решает список «Строки с неверным числом колонок»: оставить как есть, удалить, дополнить пустыми ячейками или обрезать лишние. Точка отсчёта — первая строка файла: она задаёт число колонок. Номера в отчёте считаются по исходному файлу, где заголовок — строка 1.

Как удаляются дубликаты и что считается одинаковой строкой?

Одинаковыми считаются строки, у которых после всех правок совпали все ячейки. Сравнение посимвольное и с учётом регистра: «Москва» и «москва» — разные значения. Хвостовые пустые ячейки при сравнении отбрасываются, поэтому «Иван;25» и «Иван;25;» — одна и та же строка. Из одинаковых остаётся первая, порядок строк не меняется. Заголовок не считается дубликатом никогда, а строка, совпавшая с заголовком, из файла исчезнет.

Что такое BOM и почему он ломает первый столбец?

BOM — невидимый символ в самом начале файла, которым программы помечают кодировку UTF-8. Excel и «1С» пишут его почти всегда. Глазами он не виден, но входит в значение первой ячейки первой строки: колонка называется не «id», а «\ufeffid», и импорт не находит её по имени, а первое значение в базе получает лишний символ. Инструмент распознаёт BOM в исходном тексте и убирает его из результата, пока включён флажок «Удалить BOM» — в отчёте видно, был он найден или нет.

Меняет ли инструмент порядок строк и колонок?

Нет. Строки остаются в том же порядке, просто из них выбрасываются пустые и повторные; колонки тоже остаются на своих местах, уходят только те, что пусты целиком. Перестановок и сортировки здесь нет намеренно: в CSV часто важен порядок — он задаёт очерёдность записей при импорте. Если нужна сортировка или выбор нужных колонок, это делается в просмотрщике CSV, а не в очистке.

Можно ли исправить файл, где вместо запятой точка с запятой?

Да, это одна из основных задач страницы. Список «Разделитель на входе» оставьте на «Определить автоматически» — разделитель угадывается по первой строке файла, и в подсказке видно, что именно выбрано. Затем задайте «Разделитель на выходе»: запятую для формата RFC 4180, точку с запятой — если файл откроют в Excel с русской локалью, где запятая занята десятичным разделителем.

Куда деваются пробелы вокруг разделителей?

Флажок «Убрать пробелы вокруг разделителей» работает по исходному тексту и снимает лишь те пробелы, что примыкают к разделителю: «Москва , 30» превращается в «Москва,30». Значения в кавычках не трогаются — отступы внутри них считаются данными. Флажок «Обрезать пробелы в ячейках» действует иначе: он чистит края каждой ячейки уже после разбора, включая содержимое кавычек. Неразрывный пробел на краю ячейки обрабатывается вместе с обычным.

Текст файла отправляется на сервер?

Нет. Файл читается браузером с диска и обрабатывается на JavaScript: ни загрузки на сервер, ни запросов по сети нет, поэтому работу можно проверить, отключив интернет. Обратная сторона та же, что и у всех локальных инструментов: при обновлении вкладки вставленный текст пропадёт, поэтому результат лучше сразу скачать или скопировать.