Go言語|CSVファイルを読み書きするサンプルコード Adv.

田中太郎
田中太郎

Go言語で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:])
}

コメント

タイトルとURLをコピーしました