Чтение файла формата CSV в Golang

Разработка /
Разработка: Чтение файла формата CSV в Golang

Формат CSV довольно популярен среди тех, кто работает с табличными приложениями, такими как Google Sheets или Microsoft Excel. Как работать с этим форматом в приложениях на языке Go? Сегодня мы разберёмся с этой задачей: загрузим CSV в структуру данных, а затем выгрузим данные в JSON.

В других языках программирования работа с данными, разделёнными запятыми (CSV), бывает очень сложной. Бывает, что для этого даже пишут целые библиотеки. В Go работа с данными в формате CSV возможна «из коробки» благодаря пакету encoding/csv.

Возьмём для примера следующий данные (файл people.csv):

Nic,Raboy,San Francisco,CA
Maria,Raboy,Dublin,CA
Steve,,,

Это просто небольшой список людей. Он может содержать много строк и колонок, но для нашего примера этого достаточно.

А теперь перейдём непосредственно к коду программы:

// main.go

package main
 
import (
    "bufio"
    "encoding/csv"
    "encoding/json"
    "fmt"
    "io"
    "log"
    "os"
)
 
type Person struct {
    Firstname string   `json:"firstname"`
    Lastname  string   `json:"lastname"`
    Address   *Address `json:"address,omitempty"`
}
 
type Address struct {
    City  string `json:"city"`
    State string `json:"state"`
}
 
func main() {
    csvFile, _ := os.Open("people.csv")
    reader := csv.NewReader(bufio.NewReader(csvFile))
    var people []Person
    for {
        line, error := reader.Read()
        if error == io.EOF {
            break
        } else if error != nil {
            log.Fatal(error)
        }
        people = append(people, Person{
            Firstname: line[0],
            Lastname:  line[1],
            Address: &Address{
                City:  line[2],
                State: line[3],
            },
        })
    }
    peopleJson, _ := json.Marshal(people)
    fmt.Println(string(peopleJson))
}

Перед запуском приложения убедитесь, что оба файла — код в файле main.go и данные в CSV в файле people.csv — существуют и находятся рядом в любой папке вашего компьютера.

Рассмотрим подробнее структуру:

type Person struct {
    Firstname string   `json:"firstname"`
    Lastname  string   `json:"lastname"`
    Address   *Address `json:"address,omitempty"`
}
 
type Address struct {
    City  string `json:"city"`
    State string `json:"state"`
}

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

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

Источник: «Parse CSV Data Using The Go Programming Language»
0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.