[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}]