Существует множество табличных форматов данных. 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, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»