🐥
go言語を用いたCSVファイル操作
CSVファイルへの書き込み
主要な関数
os.Create("output.csv"):"output.csv"が存在しない場合は新たに作成して開く。既に存在している場合は、ファイルの中身を空にしてから開く。
w.Write(record):スライスrecordの中身をwへ書き込む。
package main
import (
"encoding/csv"
"log"
"os"
)
func main() {
records := [][]string{
{"first_name", "last_name", "username"},
{"Rob", "Pike", "rob"},
{"Ken", "Thompson", "ken"},
{"Robert", "Griesemer", "gri"},
}
f, err := os.Create("output.csv")
if err != nil {
log.Fatal(err)
}
w := csv.NewWriter(f)
for _, record := range records {
if err := w.Write(record); err != nil {
log.Fatalln("error writing record to csv:", err)
}
}
// 書き込み処理
w.Flush()
if err := w.Error(); err != nil {
log.Fatal(err)
}
}
作成された"output.csv"の中身
first_name,last_name,username
Rob,Pike,rob
Ken,Thompson,ken
Robert,Griesemer,gri
CSVファイルからの読み込み
主要な関数
os.Open("input.csv"):"input.csv"を読み取り専用で開く。存在しない場合はエラーを返す。
r.Read():rから1行読み取る。読み取るデータが残っていない場合はnil,io.EOFを返す。
読み取りに利用する"input.csv"の中身
名前1,11才
名前2,12才
名前3,13才
名前4,14才
名前5,15才
package main
import (
"encoding/csv"
"fmt"
"io"
"log"
"os"
)
func main() {
f, err := os.Open("input.csv")
if err != nil {
log.Fatal(err)
}
r := csv.NewReader(f)
for {
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Println(record)
}
}
実行結果
[名前1 11才]
[名前2 12才]
[名前3 13才]
[名前4 14才]
[名前5 15才]
Discussion