Как работать с csv файлами в с

Обновлено: 04.07.2024

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

CSV-файл — это текстовый файл, в котором хранится информация в табличном виде, а поля этой таблицы разделяются специальными символами — разделителями. Вот почему этот файл называется Comma Separated Values — значения, разделённые запятыми. Образно говоря, CSV библиотека — это своего рода контейнер для хранения различных функций для работы с CSV-файлами.

Мы хотели бы обратить ваше внимание на следующее тематическое исследование, которое объяснит, как мы в Cleveroad создали нашу собственную CSV библиотеку AdaptiveTableLayout для Android, как ее использовать и почему она лучше, чем ее аналоги.

Почему CSV?

Мы создали CSV библиотеку, функции которой каждый пользователь может применить в своем программном обеспечении. Кроме того, мы разработали CSV-ридер, как демонстрацию практического применения библиотеки AdaptiveTableLayout.

Конечно, это не трендовое программное обеспечение, которое будет популярно среди пользователей Android. Но если вы работаете с большим массивом информации, эта библиотека может быть очень полезна при разработке программного обеспечения.

Исследования рынка

Мы начали исследование рынка для того, чтобы изучить другие доступные CSV-ридеры для Android, проверяя их функции и возможности. Давайте рассмотрим некоторые аналоги для наглядной демонстрации того, что привело нас к созданию своего решения.

CSV Viewer

Данный CSV Viewer позволяет редактировать CSV-файлы, а также работать с импортом и экспортом телефонных контактов.

Слабые стороны

У него отсутствует функция динамического нумерации. Кроме того, внутри приложения встроена реклама, что может раздражать, когда ты работаешь с документом. И в отличии от нашего CSV-ридера и библиотеки, он не позволяет делать диагональные прокрутки и исправлять заголовки.

Lightweight CSV Viewer

В этом CSV Reader есть функция сортировки отображаемых данных, несколько разделителей и отображение номера строки.

Слабые стороны

Во-первых, он также содержит рекламу, а во-вторых у него нет функции перетаскивания, когда вы можете перемещать все строки и столбцы в таблице. В отличии от других перечисленных CSV-ридеров, наш может похвастаться такой функцией.

Easy CSV Reader

И последний из примеров — это CSV app. Это очень простое приложение, которое предназначено только для чтения CSV-файлов.

Слабые стороны

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

Вдобавок к вышесказанному, мы хотели бы указать на еще одну особенность, которой не хватает CSV Viewer и CSV Reader, — они не могут быстро работать с большими файлами. Но наша библиотека позволяет это делать.

Проведя исследование рынка, мы проанализировали существующие решения для Android и сделали соответствующие выводы. Мы изменили дизайн нашего CSV-ридера, чтобы сделать его уникальным, создали библиотеку с открытым исходным кодом, чтобы позволить всем желающим интегрировать ее в свое программное обеспечение и выпустили ее в свободном доступе для бесплатной загрузки без рекламы.

Этапы разработки AdaptiveTableLayout

А сейчас мы бы хотели подробно рассказать, как мы создавали нашу библиотеку.

Во-первых, наши Android-разработчики применили технологию RecyclerView, которая использовалась для интеграции функций прокрутки. Затем был создан прототип будущего приложения, чтобы проверить как оно будет выглядеть. Данный этап также включал функциональное тестирование и проверку всех методов работы с библиотекой. Сделав это, разработчики приступили к интеграции новых функций в приложение, чтобы сделать его кастомизированным и уникальным.

Библиотека была создана с использованием встроенного Android SDK и API 16 уровня.

Оптимизация и составление документации

Разработчики привели CSV-ридер в порядок, представив его вместе с соответствующей документацией и подробным описанием работы приложения и использования библиотеки. После чего мы еще раз протестировали нашу библиотеку и исправили найденные ошибки.

Сейчас приложение CSV Reader доступно на Google Play Store, а библиотека AdaptiveTableLayout на GitHub.

Функции AdaptiveTableLayout

Итак, какими функциями может похвастаться наша библиотека:

  • Чтение и редактирование CSV-файлов
  • Изменение положения строк и столбцов
  • Диагональная прокрутка
  • Фиксирование заголовков по краям
  • Изменение поля ячейки
  • Работа с большими файлами без задержек
  • Перетаскивание строк и столбцов

Помимо этого, библиотека содержит два адаптера данных:

Первый — BaseDataAdaptiveTableLayoutAdapter, который позволяет работать с маленьким объемом данных. Исходные данные могут быть изменены после активации каждого столбца/строки.

Второй — LinkedAdaptiveTableAdapter использует матрицу с измененными элементами и ссылками на них. Он может работать с большим объемом данных. Исходные данные не могут быть изменены.

Перед использованием адаптеров, упомянутых выше, вам необходимо знать точную ширину и высоту строк и столбцов, а также их количество.

Преимущества AdaptiveTableLayout

Ни в одной другой библиотеке вы не найдете тех же функций, что и в AdaptiveTableLayout, где вы можете сделать следующее:

  • Диагональную прокрутку
  • Использовать функцию перетаскивания для изменения строк / столбцов
  • Фиксировать длину заголовка
  • Порядковый номер строки меняется при перемещении строки вверх/вниз.

Основные проблемы, которые нам пришлось преодолеть

Иногда в разработке приложений могут возникнуть свои нюансы, которые мешают двигаться дальше. Но мы никогда не опускаем рук и справляемся с возникшими препятствиями. Мы хотим поделиться проблемами, которые нам пришлось решать во время разработки приложения.

  • Интеграция функции прокрутки. Другие CSV библиотеки предоставляют только прокрутку вверх и вниз или слева направо. Поэтому разработчики решили интегрировать функцию диагональной прокрутки. Это было нелегкой задачей, так как они хотели сделать это на основе RecyclerView. Прежде, чем это удалось, потребовалось некоторое время, но код выглядел ужасно. Вследствие чего они пришли к выводу, что лучше всего управлять этим вручную и удалить из библиотеки RecyclerView вообще, и использовать его в CSV Reader.
  • Расчет позиций элементов. Было необходимо точно рассчитать где будет расположен каждый элемент. Сложность процесса заключалась в большом количестве расчетов, которые нужно было выполнять программистам.
  • Проблемы с разработкой адаптеров. Потребовалось много времени, чтобы создать адаптер, который будет кэшировать все изменения с перетаскиваниями. Что упростило работу с большими CSV-файлами.
  • Перемещение строк / столбцов. Это не было большой проблемой, но тоже потребовалось время для оптимальной и удобной реализации этой функции.

Кроме того, в будущем мы планируем добавить функцию «сужения/растягивания» и масштабирования. А также добавить функцию написания справа налево для людей из стран Ближнего Востока.

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

В стандартной библиотеке у нас есть модуль для чтения файлов csv. Этот модуль не очень полезен, если мы используем numpy или pandas, но поскольку эти модули не всегда доступны, полезно на него взглянуть.

Что такое файл csv? Это табличный текстовый файл с колонками, разделенными запятыми. Подробнее читайте здесь.

Давайте начнем с импорта модуля и посмотрим, что он нам выдаст:

Вот как выглядит результат команды выше:

Есть два названия, которые кажутся очевидными: reader и writer. Есть и другие моменты, с которыми мы будем знакомиться постепенно.

В справке для reader и writerговорится следующее:

Внутри модуля определено несколько диалектов:

По умолчанию мы получаем три разных диалекта.

Что такое диалект?

Давайте посмотрим, на чем основывается dialect.

Диалект содержит способы определения того, как будет читаться или записываться файл csv. Например, в диалекте excel есть следующее:

На экране появится что-то вроде этого:

Некоторые из этих вещей станут более понятными, если вы прочитаете документацию здесь и/или посмотрите примеры ниже.

Давайте создадим файл в формате csv . Я делаю это с помощью IPython или Jupyter Notebook, в котором есть волшебная команда writefile, позволяющая записать текстовый файл на диск.

Вы можете сделать то же самое или использовать текстовый редактор, такой как Geany, Notepad, Notepad++, vim, …

На экране появится следующее:

Если мы хотим, чтобы значения, которые являются числами, были преобразованы в числовые значения после того, как мы их прочитаем, мы можем использовать аргумент quoting и передать ему параметр csv.QUOTE_NONNUMERIC, который преобразует в float все, что не заключено в кавычки:

На экране появится следующее:

Читаю его с помощью следующего кода:

Это выдаст ошибку:

Если я теперь использую csv.QUOTE_NONE, он закавычит все и сохранит исходные кавычки (здесь я снова использую файл data.csv).

На экране появится следующее:

Вместо reader мы можем использовать DictReader, который позволяет нам читать строки как словарь, используя заголовок в качестве ключа:

Это отобразится на экране:

Мы можем создать свой собственный диалект, чтобы, например, записать на диск свой собственный формат:

Мы будем использовать только что созданный диалект.

Прочитаем файл csv, созданный нами ранее, и собираемся сохранить его, используя наш новый диалект:

Внутри модуля csv есть очень интересная утилита под названием Sniffer. Представим, что мы получаем файлы, которые могут иметь различные разделители (например, запятые или точки с запятой,…), но при этом мы априори не знаем, какого типа они будут, будет ли у них заголовок,… Sniffer может помочь нам в этом. Давайте посмотрим, как.

Прочитаем файл, который мы создали.

На экране появится следующее:

Вот что он покажет:

Таким образом, мы смогли убедиться, что то, что мы получим, выглядит так, как будто у него нет заголовков, и похоже, что разделитель является ,. Конечно, это не всегда безошибочно, но это лучше, чем ничего.

Сохраните статью в социальных сетях, чтобы не потерять.

Похожие записи

Если вам нужно скопировать файл с помощью Python, но вы не знаете, как это сделать,…

Иногда нам нужно преобразовать Excel или CSV в другой формат, в этот раз мне нужно…

Вы когда-нибудь задумывались, есть ли быстрый способ узнать, чему посвящен тот или иной документ, какая…

Уже не первый год пользуюсь своим универсальным конвертером CSV файлов в БД SQL Server - ImportExportDataSql, который имеет ряд полезных функций, необходимых любому разработчику БД MSSQL, например: перенос данных с одной БД в другую через SQL скрипт, выгрузка структуры БД, загрузка файлов в БД, выгрузка файлов из БД на диск (кроме этого, обработка типа varbinary работает в CSV), объединение SQL выборок в один файл и др.

ImportExportDataSql бесплатный, портативный, без рекламы и оповещает об обновлениях.

Поставил себе цель, ускорить загрузку CSV в БД MSSQL быстрее, чем это делает стандартная утилита "bcp". В моем приложении используется стандартный способ чтения CSV файлов, через System.IO.StreamReader методом ReadLine, но я уверен, что стандартные способы не самые производительные.

максимальное потребление оперативной памяти

средняя нагрузка CPU (%)

Подробные результаты тестов, а также исходники для тестирования описанных способов, приведены в конце статьи.

Как проводилось тестирование?

Один и тот же CSV файл обрабатывался в цикле 10 раз подряд одним и тем же способом. Пока работает цикл, в отдельном потоке таймер раз в 300 милисекунд собирает статистику потребления памяти и нагрузку процессора, чтобы в конце посчитать средние показатели (в таблице результатов они обозначены AVG).

Все тесты проводились в сборке "Release".

Тесты проводились на прогретом железе, т.е. приложение запускалось несколько раз, пока время обработки файла в цикле будет примерно одинаково.

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

Способ 1. Загрузка CSV с многострочными полями

Для начала хотелось бы рассказать о том, в чем преимущество ImportExportDataSql перед стандартными способами загрузки CSV в SQL Server (утилита bcp или операция BULK INSERT).

загрузка больших CSV файлов блоками (1 блок = 1 транзакция = N строк, где N указывает сам пользователь)

загружать CSV/Excel файлы с возможностью настройки полей, а также с ограничением количества обрабатываемых строк (удобно при отладке)

поля в заголовке не привязаны к порядковому номеру, например: файлы с заголовками "Фамилия;Имя;Отчество" и "Имя;Отчество;Фамилия" будут обработаны одинаково, независимо от порядка полей. В "bcp" это можно реализовать только с использованием файлов форматирования, а в BULK INSERT нельзя менять последовательность полей

загружать несколько CSV файлов в БД из одной папки, используя маску файлов

автоматическое создание таблицы, если её не существует, в том числе во временные глобальные таблицы (рассмотрим в примере ниже). Таблица создается в режиме "Простой импорт", в остальных режимах таблица не создается.

поддерживается обработка varbinary полей

возможность добавлять свои поля, которых нет в CSV файле с помощью встроенных функций

фильтр полей в режиме "Поиск по заголовку"

Список встроенных функций обработки CSV в ImportExportDataSql

NEWID - генерация GUID значения

ROWNUM - порядковый номер записи

EXCELROWNUM - номер строки в CSV/Excel файле

FILENAME - имя обрабатываемого файла

В качестве примера, будем использовать текстовый файл с именем multiline.csv, со следующим содержимым:

Рассмотрим загрузку CSV файла через утилиту bcp

При загрузке CSV файла, приведенного в примере, через утилиту bcp или операцией BULK INSERT мы можем получить несколько ошибок. Например, выполним команду:

После этого загрузим снова наш файл с помощью той же команды и получим результат


Первая строка с заголовком загрузилась верно. А на второй строке в поле column4 мы видим только "Это пример, хотя должны были увидеть Это пример "многострочного" примечания с двойными кавычками:


Загрузка CSV файла с помощью ImportExportDataSql

С помощью ImportExportDataSql можно избавиться от ошибок, описанных выше, не изменяя CSV файл.

Пример загрузки CSV файла, с помощью ImportExportDataSql Результат загрузки CSV с несколькими строками, с помощью ImportExportDataSql

Способ 2. System.IO.StreamReader (метод Split)

Это стандартный и самый простой способ чтения файлов, который имеет один недостаток при вызове метода ReadLine(): возникает ошибка OutOfMemoryException, если имеется очень длинная строка в файле.

Данный способ используется чаще всего при разработке приложений. В этом тесте мы будем использовать метод Split, который разбивает строку на поля по указанному символу разделителю. По результатам, данный способ показал 4 место по времени выполнения и 3 место по использованию памяти. Я был немного удивлен, что данный способ далеко не самый быстрый.

Способ 3. LumenWorks.Framework.IO.Csv.CsvReader

Подробности описания данного метода см. здесь. По итогам теста, данный способ немного быстрее стандартного метода, но это происходит только с файлом, который участвует в тесте (размером 557Мб, 44 столбца).

Я протестировал обработку другого файла, размером 795 Мб и этот метод оказался самым быстрым. Файл размером 795 Мб (32 столбца) обрабатывался в среднем за 2233 мс.

Возможно, увеличение количества столбцов в CSV так сильно повлияло на работу этой библиотеки и производительность упала в 2 раза.

Данная библиотека не умеет обрабатывать CSV отдельно по строкам, вместо этого она пытается загрузить весь файл в объект, который должен быть заранее описан в виде отдельного класса или структуры. В связи с этими недостатками, библиотека показала самые худшие результаты обработки больших CSV файлов. FileHelpers не только самая медленная, но еще и очень сильно потребляет память, а диагностика нам показывает, что сборщик мусора вызывается постоянно.

На картинке ниже сравниваем способы 2 (слева) и 4 (справа):


Обратите внимание на график Process Memory, на желтые флажки, которые означают запуск сборки мусора. Слева всего 6 раз вызывается GC, а справа бесчисленное количество раз, что сказывается на производительности.

При обработке файла размером 795Мб сначала тест провалился. Во первых, нехватает памяти, во-вторых начинает работать процесс "Отчет об ошибках Windows"


Чтобы избежать нехватки памяти добавил принудительный вызов сбора мусора:

После этого тест прошел и я увидел, что данный способ для обработки файла 795 Мб требуется в 10 раз больше памяти.

Для моего приложения этот способ совсем не подходит, так как я заранее не знаю сколько полей будет в CSV и определять заранее класс или структуру неудобно. Возможно, популярность библиотеки (судя по количеству звезд на github), объясняется не производительностью, а другими возможностями. Если найдутся разработчики, которые читают эту статью и используют FileHelpers, напишут нам в комментариях, за что им нравится эта библиотека.

Способ 5. fastCSV

Подробности описания данного метода см. здесь. Проект выложен на github. Исходники данной библиотеки работают по такому же принципу, как и FileHelpers (способ 4), т.е. обрабатывается файл целиком и нужно заранее создать класс и описать все свойства для маппинга. Так как код этой библиотеки не сложный и он показал значительно лучшую производительность по сравнению с FileHelpers (см. "original" в таблице сравнения результатов), то я изменил код и сделал методы чтения CSV построчно, без маппинга в класс (см. "inline" в таблице сравнения результатов). Код fastCSV с методом "inline" можете скачать из исходников (см. ссылку в конце статьи).

В итоге, для тестового CSV файла размером 795Мб, данный способ оказался самым быстрым и менее затратным по CPU и оперативной памяти. С помощью этой библиотеки действительно можно значительно повысить скорость чтения CSV.

В случае, если необходимо маппить CSV с объектом, то этот вариант в 2 раза быстрее, чем FileHelpers и менее затратный в памяти, чем FileHelpers.

Способ 6. Memory Mapped Files

Этот способ я выбрал напоследок, чтобы проверить его на деле. Данный способ бывает полезен, если нужно работать с файлом параллельно из нескольких потоков или процессов. На практике я его никогда не использовал, но в свои тесты добавил. По результатам видно, что памяти потребляется почти столько же (немного меньше), чем размер файла.

Способ 7. CsvHelper

Проект выложен на github. С помощью этой библиотеки необходимо обязательно создавать класс для маппинга, при чем названия полей свойств должны быть такие же как заголовок в CSV файле. Соответственно, файл без заголовка CsvHelper не может прочитать.

По всем параметрам данный способ занимает 6-е место из 7.

Метод построчного (one row) чтения файла с помощью CSVHelper

Таблица сравнения результатов

Тесты проводились на двух файлах. Первый файл слева (до знака /), второй файл справа (после знака /):


Продукты HFLabs в промышленных объемах обрабатывают данные: адреса, ФИО, реквизиты компаний и еще вагон всего. Естественно, тестировщики ежедневно с этими данными имеют дело: обновляют тест-кейсы, изучают результаты очистки. Часто заказчики дают «живую» базу, чтобы тестировщик настроил сервис под нее.

Первое, чему мы учим новых QA — сохранять данные в первозданном виде. Все по заветам: «Не навреди». В статье я расскажу, как аккуратно работать с CSV-файлами в Excel и Open Office. Советы помогут ничего не испортить, сохранить информацию после редактирования и в целом чувствовать себя увереннее.

Материал базовый, профессионалы совершенно точно заскучают.

Что такое CSV-файлы

Формат CSV используют, чтобы хранить таблицы в текстовых файлах. Данные очень часто упаковывают именно в таблицы, поэтому CSV-файлы очень популярны.



CSV-файл состоит из строк с данными и разделителей, которые обозначают границы столбцов

CSV расшифровывается как comma-separated values — «значения, разделенные запятыми». Но пусть название вас не обманет: разделителями столбцов в CSV-файле могут служить и точки с запятой, и знаки табуляции. Это все равно будет CSV-файл.

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

Из-за своих преимуществ CSV — сверхпопулярный формат обмена данными, хотя ему уже лет 40. CSV используют прикладные промышленные программы, в него выгружают данные из баз.

Одна беда — текстового редактора для работы с CSV мало. Еще ничего, если таблица простая: в первом поле ID одной длины, во втором дата одного формата, а в третьем какой-нибудь адрес. Но когда поля разной длины и их больше трех, начинаются мучения.



Следить за разделителями и столбцами — глаза сломаешь

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

Поэтому CSV-файлы анализируют и редактируют в Excel и аналогах: Open Office, LibreOffice и прочих.

Ветеранам, которые все же дочитали: ребята, мы знаем об анализе непосредственно в БД c помощью SQL, знаем о Tableau и Talend Open Studio. Это статья для начинающих, а на базовом уровне и небольшом объеме данных Excel с аналогами хватает.

Как Excel портит данные: из классики

Все бы ничего, но Excel, едва открыв CSV-файл, начинает свои лукавые выкрутасы. Он без спроса меняет данные так, что те приходят в негодность. Причем делает это совершенно незаметно. Из-за этого в свое время мы схватили ворох проблем.

Большинство казусов связано с тем, что программа без спроса преобразует строки с набором цифр в числа.

Округляет. Например, в исходной ячейке два телефона хранятся через запятую без пробелов: «5235834,5235835». Что сделает Excel? Лихо превратит номера́ в одно число и округлит до двух цифр после запятой: «5235834,52». Так мы потеряем второй телефон.

Приводит к экспоненциальной форме. Excel заботливо преобразует «123456789012345» в число «1,2E+15». Исходное значение потеряем напрочь.

Проблема актуальна для длинных, символов по пятнадцать, цифровых строк. Например, КЛАДР-кодов (это такой государственный идентификатор адресного объекта: го́рода, у́лицы, до́ма).

Потеря плюса критична, например, если данные пойдут в стороннюю систему, а та при импорте жестко проверяет формат.

Разбивает по три цифры. Цифровую строку длиннее трех символов Excel, добрая душа, аккуратно разберет. Например, «8 495 5235834» превратит в «84 955 235 834».

Форматирование важно как минимум для телефонных номеров: пробелы отделяют коды страны и города от остального номера и друг от друга. Excel запросто нарушает правильное членение телефона.

Удаляет лидирующие нули. Строку «00523446» Excel превратит в «523446».
А в ИНН, например, первые две цифры — это код региона. Для Республики Алтай он начинается с нуля — «04». Без нуля смысл номера исказится, а проверку формата ИНН вообще не пройдет.

Меняет даты под локальные настройки. Excel с удовольствием исправит номер дома «1/2» на «01.фев». Потому что Windows подсказал, что в таком виде вам удобнее считывать даты.

Побеждаем порчу данных правильным импортом

Если серьезно, в бедах виноват не Excel целиком, а неочевидный способ импорта данных в программу.

По умолчанию Excel применяет к данным в загруженном CSV-файле тип «General» — общий. Из-за него программа распознает цифровые строки как числа. Такой порядок можно победить, используя встроенный инструмент импорта.

Запускаю встроенный в Excel механизм импорта. В меню это «Data → Get External Data → From Text».

Выбираю CSV-файл с данными, открывается диалог. В диалоге кликаю на тип файла Delimited (с разделителями). Кодировка — та, что в файле, обычно определяется автоматом. Если первая строка файла — шапка, отмечаю «My Data Has Headers».

Перехожу ко второму шагу диалога. Выбираю разделитель полей (обычно это точка с запятой — semicolon). Отключаю «Treat consecutive delimiters as one», а «Text qualifier» выставляю в «». (Text qualifier — это символ начала и конца текста. Если разделитель в CSV — запятая, то text qualifier нужен, чтобы отличать запятые внутри текста от запятых-разделителей.)

На третьем шаге выбираю формат полей, ради него все и затевалось. Для всех столбцов выставляю тип «Text». Кстати, если кликнуть на первую колонку, зажать шифт и кликнуть на последнюю, выделятся сразу все столбцы. Удобно.

Дальше Excel спросит, куда вставлять данные из CSV — можно просто нажать «OK», и данные появятся в открытом листе.


Перед импортом придется создать в Excel новый workbook

Но! Если я планирую добавлять данные в CSV через Excel, придется сделать еще кое-что.

После импорта нужно принудительно привести все-все ячейки на листе к формату «Text». Иначе новые поля приобретут все тот же тип «General».

  • Нажимаю два раза Ctrl+A, Excel выбирает все ячейки на листе;
  • кликаю правой кнопкой мыши;
  • выбираю в контекстном меню «Format Cells»;
  • в открывшемся диалоге выбираю слева тип данных «Text».

Чтобы выделить все ячейки, нужно нажать Ctrl+A два раза. Именно два, это не шутка, попробуйте

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

Альтернатива: Open Office Calc

Для работы с CSV-файлами я использую именно Calc. Он не то чтобы совсем не считает цифровые данные строками, но хотя бы не применяет к ним переформатирование в соответствии с региональными настройками Windows. Да и импорт попроще.

Конечно, понадобится пакет Open Office (OO). При установке он предложит переназначить на себя файлы MS Office. Не рекомендую: хоть OO достаточно функционален, он не до конца понимает хитрое микрософтовское форматирование документов.

А вот назначить OO программой по умолчанию для CSV-файлов — вполне разумно. Сделать это можно после установки пакета.

Итак, запускаем импорт данных из CSV. После двойного клика на файле Open Office показывает диалог.



Заметьте, в OO не нужно создавать новый воркбук и принудительно запускать импорт, все само

  1. Кодировка — как в файле.
  2. «Разделитель» — точка с запятой. Естественно, если в файле разделителем выступает именно она.
  3. «Разделитель текста» — пустой (все то же, что в Excel).
  4. В разделе «Поля» кликаю в левый-верхний квадрат таблицы, подсвечиваются все колонки. Указываю тип «Текст».

Помимо Calc у нас в HFLabs популярен libreOffice, особенно под «Линуксом». И то, и другое для CSV применяют активнее, чем Excel.

Бонус-трек: проблемы при сохранении из Calc в .xlsx

Если сохраняете данные из Calc в экселевский формат .xlsx, имейте в виду — OO порой необъяснимо и масштабно теряет данные.


Белая пустошь, раскинувшаяся посередине, в оригинальном CSV-файле богато заполнена данными

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

Если что-то потерялись, лечение — пересохранить из CSV в .xlsx. Или, если установлен Windows, импортнуть из CSV в Excel и сохранить оттуда.

После пересохранения обязательно еще раз проверяю, что все данные на месте и нет лишних пустых строк.

Если интересно работать с данными, посмотрите на наши вакансии. HFLabs почти всегда нужны аналитики, тестировщики, инженеры по внедрению, разработчики. Данными обеспечим так, что мало не покажется :)

Читайте также: