Откройте CSV-файл, чтобы проверить его структуру: число полей в каждой записи по сравнению со строкой заголовков, пустые и повторяющиеся названия столбцов, лишние кавычки, смешанные окончания строк и пустые строки. При желании добавьте правила для столбцов — целое число, дата, email, обязательное значение, уникальность, допустимые значения или регулярное выражение, — и каждая проблема будет показана с номером строки данных, столбцом и значением. Правила используют словарь Frictionless Table Schema. Файл проверяется в вашем браузере и не загружается на сервер.
Как проверить CSV-файл
- Откройте файл
.csv,.tsvили.txt. Разделитель и метка порядка байтов UTF-8 или UTF-16 определяются автоматически; если столбцы выглядят неправильно, выберите другой разделитель или устаревшую кодировку в параметрах импорта. - При желании укажите, сколько столбцов должно быть в каждой записи. Если поле пустое, используется число столбцов в строке заголовков.
- При желании добавьте правила для нужных столбцов: тип, обязательность или уникальность значения, допустимые значения, минимум и максимум, диапазон длины или шаблон.
- Запустите проверку и разберите отчёт: сначала ошибки, затем предупреждения. Исправьте значения в редакторе CSV или приведите их в порядок с помощью очистки данных CSV, а потом проверьте снова.
Чтобы перед написанием правил увидеть типы, пустые и уникальные значения каждого столбца, откройте файл в профиле столбцов.
Проверка структуры каждой записи
| Число полей (ошибка) | В записи больше или меньше полей, чем в строке заголовков или чем указанное вами число. RFC 4180 предполагает одинаковое число полей во всех записях; расхождение обычно означает разделитель без кавычек или пропущенное значение. |
|---|---|
| Пустой заголовок (ошибка) | Название столбца пустое или состоит только из пробелов. В отчёте указана его позиция. |
| Повторяющийся заголовок (ошибка) | Два названия столбцов совпадают после удаления пробелов по краям. В отчёте указаны обе позиции. |
| Лишняя кавычка (предупреждение) | Кавычка стоит внутри значения без кавычек, например 5" screen. Значение сохраняется как записано; в отчёте указано число таких случаев в файле. |
| Текст после закрывающей кавычки (предупреждение) | После закрывающей кавычки до следующего разделителя идут символы, как в "abc"x. |
| Смешанные окончания строк (предупреждение) | В файле встречаются разные окончания записей — CRLF, LF и CR. Отчёт считает каждый вид. |
| Пустые строки (предупреждение) | Пустые строки между записями. Они пропускаются, а отчёт их считает. |
| Пробелы по краям (предупреждение) | У значения есть пробелы до или после текста. Проверка включена по умолчанию; значения, состоящие только из пробелов, не учитываются. |
Значение в кавычках, которое так и не закрывается, останавливает проверку с ошибкой, где указана запись, в которой оно начинается: остаток файла уже нельзя надёжно разбить на записи.
Правила для столбцов: тип, обязательность, уникальность и шаблон
| Тип: integer (целое число) | Только необязательный знак и цифры, например -12 или 007. Значения за пределами ±9 007 199 254 740 991 попадают в отчёт, поэтому для длинных идентификаторов (например, 20-значных номеров банковских счетов) используйте правило для текста с шаблоном. |
|---|---|
| Тип: number (число) | Обычная десятичная запись с точкой, например 3.5, -0.25 или 1e3. Без разделителей разрядов, валюты и пробелов по краям — поэтому 1 234,50 из русской выгрузки в отчёт попадёт. |
| Тип: boolean (логическое) | true или false в любом регистре. 1, 0, yes и no попадают в отчёт. |
| Тип: date, datetime (дата, дата и время) | Существующая календарная дата в формате YYYY-MM-DD, поэтому 2024-02-30 попадает в отчёт. Тип datetime добавляет время (2024-03-05T09:30, секунды и смещение Z или +02:00 необязательны). |
| Тип: string с форматом | Email (простая проверка вида name@domain.tld, а не проверка доставки), URI (абсолютный URL со схемой) или UUID (версии 1–8). |
| Обязательное | Значение не может быть пустым. Без этого правила пустые значения проходят все остальные правила. |
| Уникальное | Значения в столбце не должны повторяться. В отчёте указана строка, где значение встретилось впервые. Пустые значения не сравниваются. |
| Допустимые значения | Значение должно в точности совпадать с одним из перечисленных, включая регистр и пробелы. |
| Минимум, максимум | Включительные границы для столбцов integer и number или даты ISO для столбцов date и datetime. |
| Минимальная и максимальная длина | Считается в символах Unicode, поэтому é и 日 — по одному символу. |
| Шаблон | Регулярное выражение, которое должно совпадать со всем значением целиком, как требует Table Schema; например [A-Z]{2}\d{4}. Регистр учитывается. |
Правило применяется к столбцу, заголовок которого в точности совпадает с его названием; правила для столбцов, которых нет в файле, пропускаются. Правила можно сохранить в JSON-файл Table Schema и загрузить снова для следующей выгрузки; неизвестные типы и ключи в загруженной схеме игнорируются.
Как читать отчёт
- Номера строк считают записи данных после строки заголовков (заголовок — строка 0). Значение с переносом строки внутри кавычек — всё равно одна запись, поэтому номер строки может отличаться от номера строки в текстовом редакторе.
- Для каждой проблемы указан столбец и приведено значение, так что его можно найти в просмотре CSV или в редакторе.
- Ошибки нарушают структуру или правило; предупреждения указывают на данные, которые являются корректным CSV, но часто вызывают проблемы при импорте.
- В списке выводится до 5000 проблем. Сверх этого количество по каждому виду проблем всё равно подсчитывается, а список помечается как усечённый.
Ограничения проверки и конфиденциальность
Проверка читает по одной записи за раз, поэтому файлы больше интерактивного лимита в 25 МБ проверяются в потоковом режиме в фоновом обработчике — с индикатором выполнения и возможностью отмены. В потоковом режиме записи, где полей меньше, чем в строке заголовков, пока дополняются до проверки, поэтому ошибкой числа полей отмечаются только записи с лишними полями.
Проверка выполняется в вашем браузере. CSV не загружается на сервер.
Пример: проверка выгрузки регистраций по четырём правилам
Выгрузка регистраций, проверенная по четырём правилам: id — обязательное уникальное целое число; email — обязательная строка в формате email; signup_date — дата; plan допускает basic, pro и team. Результат — отчёт проверки, по одной проблеме на строку после сводки: несуществующая дата, email без доменной зоны, Pro в неверном регистре, повторяющийся id, пропущенный email и team с пробелом в конце — это и предупреждение, и недопустимое значение.
id,email,signup_date,plan 1,ana@example.com,2024-02-30,pro 2,kim@example,2024-03-01,Pro 2,bao@example.com,2024-03-04,basic 4,,2024-03-05,team
{"rows":4,"errors":6,"warnings":1,"truncated":false}
{"code":"type","row":1,"column":"signup_date","value":"2024-02-30","params":{"type":"date"}}
{"code":"format","row":2,"column":"email","value":"kim@example","params":{"format":"email"}}
{"code":"enum","row":2,"column":"plan","value":"Pro","params":{"allowed":"basic, pro, team"}}
{"code":"unique","row":3,"column":"id","value":"2","params":{"first":2}}
{"code":"whitespace","row":4,"column":"plan","value":"team ","params":{}}
{"code":"required","row":4,"column":"email","value":"","params":{}}
{"code":"enum","row":4,"column":"plan","value":"team ","params":{"allowed":"basic, pro, team"}}Вопросы и ответы
Почему значение с пробелами не проходит по списку допустимых значений?
Правила сравнивают значение ровно в том виде, как оно записано, без удаления пробелов, поэтому team — это не team. Удалите пробелы в столбце с помощью очистки данных CSV или исправьте выгрузку.
Меняет ли проверка мой файл?
Нет. Она только читает файл и сообщает о найденном. Исправлять проблемы нужно в редакторе или в исходной системе.
Можно ли использовать одни и те же правила для каждой ежемесячной выгрузки?
Да. Сохраните правила в JSON-файл Table Schema и загрузите его в следующий раз; правила сопоставляются со столбцами по названию.