田中太郎
Go言語(golang)でCSVファイルを読み書きするサンプルコードを紹介します
サンプルコード
環境
標準モジュールのみを使用します
コード
package main
import (
"encoding/csv"
"fmt"
"io"
"os"
)
func error_check(err error) {
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
func read_csv(filepath string) [][]string {
csvFile, err := os.Open(filepath)
error_check(err)
reader := csv.NewReader(csvFile)
lines := [][]string{}
for {
line, err := reader.Read()
if err == io.EOF {
break
}
lines = append(lines, line)
}
csvFile.Close()
return lines
}
func read_csv_col_header(filepath string) ([]string, [][]string) {
csvFile, err := os.Open(filepath)
error_check(err)
reader := csv.NewReader(csvFile)
lines := [][]string{}
for {
line, err := reader.Read()
if err == io.EOF {
break
}
lines = append(lines, line)
}
csvFile.Close()
return lines[0], lines[1:]
}
func write_csv(filepath string, data [][]string) {
csvfile, err := os.Create(filepath)
error_check(err)
writer := csv.NewWriter(csvfile)
for _, line := range data {
writer.Write(line)
}
writer.Flush()
error_check(writer.Error())
}
func write_csv_col_header(filepath string, header []string, data [][]string) {
csvfile, err := os.Create(filepath)
error_check(err)
writer := csv.NewWriter(csvfile)
writer.Write(header)
for _, line := range data {
writer.Write(line)
}
writer.Flush()
error_check(writer.Error())
}
使い方
read_csv(filepath string) data [][]string
引数
・filepath: 読み込むファイルのパスを指定します
戻り値
・data: 読み込んだcsvファイルの行列を返します
package main
import "fmt"
func main() {
fmt.Println(read_csv("hoge.csv"))
}
出力
read_csv_col_header(filepath string) header []string, data [][]string
引数
・filepath:読み込むファイルのパスを指定します
戻り値
・header:csvファイルの1行目(ヘッダー)を返す
・data:ヘッダー以外のデータを返す
package main
import "fmt"
func main() {
fmt.Println(read_csv_col_header("hoge.csv"))
}
出力
write_csv_col_header(filepath string, data [][]string)
引数
・filepath:書き込むファイルのパスを指定します
・data:書き込むデータ
戻り値
・なし
package main
import "fmt"
func main() {
data := [][]string{
{"hoge", "fuga", "piyo"},
{"1", "2", "3"},
{"1", "2", "3"},
}
write_csv("result.csv", data)
}
write_csv_col_header(filepath string, header []string, data [][]string)
引数
・filepath:書き込むファイルのパスを指定します
・header:ヘッダー行を指定します
・data:書き込むデータ
戻り値
・なし
package main
import "fmt"
func main() {
data := [][]string{
{"hoge", "fuga", "piyo"},
{"1", "2", "3"},
{"1", "2", "3"},
}
write_csv_col_header("result.csv", data[0], data[1:])
}
コメント