Существует множество табличных форматов данных. CSV (comma-separated values, или значения, разделённые запятыми) является одним из основных форматов, он часто используется для передачи и экспорта данных. Для определения CSV нет точного стандарта, но сам формат описывает себя как RFC 4180.
Далее показано, как можно парсировать CSV-отформатированные данные.
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
Как парсировать CSV данные в Go?
1. Создайте файл data.csv со следующим содержимым:
|
1 2 3 4 |
"Name","Surname","Age" # это комментарий в файле с данными "John","Mnemonic",20 Maria,Tone,21 |
2. Создайте файл data.go со следующим содержимым:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package main import ( "encoding/csv" "fmt" "os" ) func main() { file, err := os.Open("data.csv") if err != nil { panic(err) } defer file.Close() reader := csv.NewReader(file) reader.FieldsPerRecord = 3 reader.Comment = '#' for { record, e := reader.Read() if e != nil { fmt.Println(e) break } fmt.Println(record) } } |
3. Запустите код через go run data.go;
4. Посмотрите на результат в терминале:

5. Создайте файл data_uncommon.csv со следующим содержимым:
|
1 2 3 |
Name;Surname;Age "John";Mnemonic;20 "Maria";Tone;21 |
6. Создайте файл data_uncommon.go со следующим содержимым:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package main import ( "encoding/csv" "fmt" "os" ) func main() { file, err := os.Open("data_uncommon.csv") if err != nil { panic(err) } defer file.Close() reader := csv.NewReader(file) reader.Comma = ';' for { record, e := reader.Read() if e != nil { fmt.Println(e) break } fmt.Println(record) } } |
7. Запустите код через go run data_uncommon.go;
8. Посмотрите на результат в терминале:

Функция NewReader() для чтения CSV файла
Вместо чтения информации строка за строкой с использованием strings.Split и других методов для парсинга формата CSV, Golang предоставляет более удобный способ. Функция NewReader из пакета encoding/csv возвращает структуру, что предоставляет API для чтения CSV-файла. Структура Reader сохраняет переменные для настройки параметров read в соответствии с вашими потребностями.
Параметр FieldsPerRecord из Reader является важным для настройки. В данном случае подсчет клеток на строку может стать действительным. По умолчанию, когда параметр установлен на 0, установка касается числа записей в первой строке. Если настроено положительное значение, то количество записей должно совпадать. Если значится отрицательное значение, начало подсчета клеток не будет выполнено.
Другим интересным аспектом конфигурации является параметр Comment, что позволяет вам определять символы комментариев парсированных данных. Таким образом, игнорируется вся строка комментария которая начинается с #.
Go 1.10 не позволяет использовать бессмысленные запятые и настройки комментариев. Это подразумевает несуществующие значения, возврат каретки, новую строку, поврежденные руны и символ замены Юникод. Кроме того, установка запятой и комментария равными друг другу запрещена.

Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»