Редактор выгрузил каталог поставщика, открыл таблицу, поправил названия и загрузил файл в магазин. Артикул 0017 превратился в 17. Часть карточек обновилась неверно: в магазине уже был другой товар с кодом 17.
Начальные нули теряются, когда код воспринимают как число. CSV хранит текстовые поля, но программа таблиц или импортёр могут сами определить тип. Для артикулов задавайте текстовый тип и проверяйте весь путь: исходный файл, сохранённую копию и данные после импорта.
Проверьте файл до открытия в таблице
Сохраните неизменённый оригинал. Откройте копию в текстовом редакторе и найдите несколько кодов: с нулями, буквами, дефисом и похожих друг на друга. Зафиксируйте разделитель и кодировку. Расширение .csv не сообщает, используется ли запятая или точка с запятой.
supplier_sku;name;quantity
0017;Кронштейн узкий;4
17;Кронштейн широкий;6
A-017;Кронштейн усиленный;2
0000;Заглушка;8
Это учебный набор: 0017 и 17 здесь разные товары. В своей системе правило сопоставления задаёт владелец каталога. Нельзя удалять нули, пробелы или знаки по привычке, не проверив, являются ли они частью кода.

Импортируйте колонку как текст
Откройте штатный мастер импорта табличной программы и задайте тип для колонки артикула до загрузки данных. Название команды зависит от программы и версии. Если открыть файл двойным щелчком, программа может применить автоматическое преобразование ещё до того, как вы увидите таблицу.
Формат ячейки с дорисованными нулями не возвращает потерянный исходный код. После сохранения снова откройте CSV текстовым редактором: важно, что записано в файле. Если нули уже пропали, восстановите колонку из оригинала, сохраняя связь строк по надёжному ключу.
Прочитайте те же строки без автоматического преобразования
В Python стандартный модуль csv по умолчанию читает поля как строки. Ниже минимальная проверка учебного файла; она не заменяет правила валидации конкретного магазина.
import csv
with open('catalog-example.csv', encoding='utf-8', newline='') as source:
rows = list(csv.DictReader(source, delimiter=';'))
codes = [row['supplier_sku'] for row in rows]
assert codes == ['0017', '17', 'A-017', '0000']
assert len(codes) == len(set(codes))
print('Коды прочитаны без изменения:', codes)
Здесь явно задан разделитель. Проверка уникальности пригодна, только если один код должен встречаться один раз: у таблицы остатков по складам могут быть законные повторения.
Сделайте пробную загрузку до всего каталога
| Проверка | Ожидаемый результат в учебном наборе |
|---|---|
| Нули в начале | 0017 и 0000 сохранились целиком |
| Похожие коды | 0017 и 17 не объединились |
| Буквы и знак | A-017 не изменился |
| Ключ обновления | Импортёр обновляет ту карточку, которую вы выбрали по правилам каталога |
| Повторный импорт | Количество и состав карточек соответствуют выбранному режиму; неожиданных дублей нет |
Используйте тестовый каталог или штатный предварительный просмотр. Сравните значение артикула в выгрузке, интерфейсе и повторном экспорте. Если проверка не прошла, не запускайте массовое обновление.
Что передать разработчику импортёра
Приложите исходный файл, полученную копию, ожидаемые значения и настройку ключа сопоставления. Укажите, на каком шаге появилось отличие. Формулировка «сломалась кодировка» не поможет, если проблема в числовом типе колонки.
Для более подробной автоматической проверки у автора есть Python-проверка CSV на DEV Community на английском: примеры и полный скрипт. Для быстрого воспроизведения этой статьи доступны учебный CSV и минимальный скрипт.