[Go] CSV ファイルを読み込む

作成日: 2022年02月01日

encoding/csv パッケージを使用すると CSV ファイルを読み込むことができます。

CSV ファイル dummy_users.csv の内容を下記とします。

"Tom",20
"Bob",10
"Alice",15

そして下記は CSV ファイルを読み込み、内容を構造体に割り当てている例です。

package main

import (
    "encoding/csv"
    "fmt"
    "os"
    "strconv"
)

type User struct {
    Name string
    Age  int
}

func main() {
    file, err := os.Open("dummy_users.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    csvReader := csv.NewReader(file)
    users := []User{}

    for {
        line, err := csvReader.Read()
        if err != nil {
            break
        }

        name := line[0]
        age, err := strconv.Atoi(line[1])
        if err != nil {
            continue
        }

        users = append(users, User{
            Name: name,
            Age:  age,
        })
    }

    fmt.Println(users)
}

説明

  • os.Open("dummy_users.csv") で CSV ファイルを開きます。
  • csv.NewReader(file)*Reader を得ます。
  • csvReader.Read() で 1 行を読み取ります。もし EOL に到達している場合は err が nil で無くなるため、ループ処理を抜けます。
  • line は CSV の 1 行あたりのそれぞれの列の値が含まれた string 型の配列になります。ここでは int 型に変換を行っています。
  • スライスである変数 users に、構造体 User に割り当てたものを追加していきます。

実行結果

[{Tom 20} {Bob 10} {Alice 15}]
Go