Dmitry Mikhailov

Все статьи
Дмитрий Михайлов6 мин чтения

Как сохранить ведущие нули в CSV и не перепутать коды

Если 00123 превратилось в 123, сначала проверьте исходный CSV. Разбираем текстовый импорт, кавычки и контрольные строки, по которым видно, что таблицу можно использовать дальше.

Хромированный USB-разъём флешки с чёрным лаковым корпусом

Сначала проверьте, где исчезли нули

Если в CSV записано 00123, а в таблице осталось 123, заново импортируйте исходный файл и задайте столбцу кодов текстовый тип до преобразования в числа. Добавлять нули ко всему столбцу стоит только по подтверждённому правилу исходной системы. Иначе самостоятельные коды 00123 и 123 могут стать одним значением.

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

Если нули видны в редакторе, информация сохранилась и ошибку можно искать в импорте. Если в самом файле уже записано 123, смена формата ячейки не покажет, было ли раньше 0123, 00123 или именно 123. Нужна исходная выгрузка, справочник или документированное правило длины кода.

Это особенно заметно при объединении данных. Допустим, в одном каталоге 00123 означает набор, а 123 — другой товар. После превращения обоих кодов в число программа видит одинаковый ключ. Дальнейшая формула может работать без ошибки, но связывать строки уже неправильно. Поэтому сначала восстанавливают корректное чтение, а потом считают остатки, ищут повторы или передают таблицу ИИ.

Три строки для проверки импорта

Возьмём учебный файл с колонками code и name. В нём три записи: 00123 — «Набор, большой», 123 — «Набор», 00007 — «Кружка». Все значения вымышлены. Этот же набор используется в приложении к статье: менять его перед проверкой не нужно.

Ожидаемый результат текстового чтения — три строки данных и три разных кода. Если намеренно преобразовать коды в целые числа, получатся 123, 123 и 7. Строк по-прежнему три, уникальных значений уже два. Таблица ниже показывает последствия этого преобразования; она не описывает поведение всех версий Excel.

В стандартном модуле Python csv обычный reader возвращает поля строками. Автоматическое преобразование в числа появляется при отдельных настройках, например QUOTE_NONNUMERIC, либо в последующем коде. Поэтому стоит различать чтение границ CSV и назначение типов в принимающей программе.

При проверке своего файла выберите похожие контрольные записи заранее. Нужны код с ведущими нулями, похожий код без них и хотя бы одно название с разделителем внутри. Если проверить только обычные значения вроде 456, ошибочный числовой импорт может остаться незаметным. Сохраните ожидаемые значения рядом с контрольным набором, чтобы при следующей выгрузке не вспоминать, как они выглядели.

Результат учебной проверки
3 / 3
В исходном CSVПрочитано как текстПосле преобразования в число
0012300123123
123123123
00007000077

В Excel задайте тип на исходных значениях

Для кодов используйте управляемый импорт через «Данные → Из текста/CSV» и откройте преобразование данных. Выберите столбец, задайте тип «Текст» и замените шаг, который ошибочно превращал значения в числа. Затем загрузите результат. Такой порядок описан в инструкции Microsoft; названия команд могут отличаться между редакциями и языками интерфейса.

Смысл проверки — увидеть исходные 00123, 123 и 00007 до необратимого преобразования. Если на одном шаге уже получилось число 123, следующий шаг «сделать текстом» превратит его в строку 123. Отсутствующие символы из такой строки не выводятся. Вернитесь к источнику или отмените прежний шаг назначения типа.

Настройки автоматических преобразований доступны в Microsoft 365 и Excel 2024, включая соответствующие версии для Mac. Наличие другой версии Excel не следует угадывать по похожему меню: сверяйте поддержку по справке Microsoft. Самый надёжный для конкретного файла критерий остаётся прежним — контрольные значения после загрузки должны буквально совпасть с ожидаемыми.

Не считайте выравнивание ячеек доказательством правильного типа. Оформление можно изменить отдельно. Для идентификатора важнее, что попадёт в формулу сопоставления и в следующую выгрузку. Проверьте значение в строке формул и повторите сравнение на двух кодах, которые отличаются только ведущими нулями.

Кавычки сохраняют границы поля, но не тип

Строка учебного файла выглядит так: 00123,"Набор, большой". В ней два поля. Если разрезать текст по каждой запятой, получатся три части, и слово «большой» ошибочно станет отдельной колонкой. CSV-парсер учитывает кавычки и оставляет полное название в одном поле.

RFC 4180 описывает заключение полей с запятыми, переносами строк и кавычками в двойные кавычки; внутренняя кавычка удваивается. Документ информационный, а реализации CSV различаются. Поэтому для чужой выгрузки нужно знать её разделитель и правила экранирования, а не рассчитывать на одно расширение файла.

Кавычки вокруг числового кода также не стоит принимать за универсальную команду «считать текстом». Они задают границы поля в файле. Какое значение и тип назначит ему таблица после чтения, решает импортирующая программа. Сохранность запятой и сохранность ведущего нуля — две отдельные проверки.

Ещё отдельно проверяется кодировка. Если «Кружка» превратилась в нечитаемые символы, настройка текстового типа кода это не исправит. Microsoft описывает открытие UTF-8 CSV: обычное открытие учитывает BOM, а импорт через Power Query позволяет выбрать способ чтения. После исправления кириллицы всё равно вернитесь к проверке кодов и количества полей.

Что делать, если исходного кода уже нет

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

В учебном наборе такой договорённости нет. Напротив, 00123 и 123 специально оставлены разными кодами. Дополнение всех строк до пяти символов превратит 123 в 00123 и скроет ошибку под аккуратным оформлением. Такой результат хуже заметной пропажи нулей: он выглядит исправленным.

Если правила нет, запросите повторный экспорт или сопоставление по другому устойчивому идентификатору. Название товара можно использовать для поиска кандидата, но не как доказательство: названия повторяются и меняются. Не поручайте модели угадать длину кода по смыслу слова «Набор».

Любое восстановление делайте в отдельной колонке. Рядом полезно хранить источник правила и признак проверки. Тогда можно отделить значения, перенесённые из исходной системы, от значений, преобразованных по соглашению. Смешивать их без отметки неудобно: следующий человек не поймёт, где он видит оригинал, а где результат ремонта.

Как принять таблицу перед дальнейшим анализом

Проверьте не только счётчики, но и сами контрольные значения. В примере ожидаются три строки, три уникальных code, два столбца и полное название «Набор, большой». Три строки с тремя другими кодами формально пройдут проверку количества, поэтому выборочное буквальное сравнение необходимо.

Для большой выгрузки сохраните исходник отдельно, выпишите правила полей и проверьте записи с наиболее рискованными значениями. Помимо ведущих нулей это могут быть пустые коды, длинные идентификаторы или разные разделители в названиях. Не объявляйте пустую ячейку нулём без правила: отсутствие значения и код 0 могут означать разное.

ИИ можно передать понятное задание: «code — строковый идентификатор, ведущие нули значимы. name может содержать запятые. Сохрани исходные значения; не объединяй коды и не дополняй их нулями. Сначала сообщи число строк и различных code, затем покажи отклонения от этих правил». Такой запрос задаёт условия проверки, но готовый ответ нужно сверить с контрольным набором.

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

Прочитать с ИИ

Разберите главную мысль и примените её к своей задаче.

ChatGPTClaude
Посмотреть промпт
Прочитай статью «Как сохранить ведущие нули в CSV и не перепутать коды»: https://dmitrymikhailov.com/insights/csv-codes-without-lost-zeros Объясни её основную мысль и назови конкретные примеры, на которых держатся выводы. Отдели факты статьи от своих предположений. Затем спроси, какую задачу я решаю, и помоги применить подход из статьи: предложи первый шаг и способ проверить результат. Если страница недоступна, попроси меня вставить текст. Не придумывай её содержание.