ローカルの環境からcsv.gzファイルを展開して読み込む方法のメモ書きです。
まず、下記のようなcsv.gzファイルを実行するgoスクリプトと同じ場所に配置します。
// sample.csv.gz
id,name,age
1,taro,25
2,jiro,20
3,saburo,12
後は下記のコードを実行すれば、読み込みが行えます。
package main
import (
"compress/gzip"
"encoding/csv"
"fmt"
"io"
"os"
)
func main() {
// ファイルをOpenする
o, err := os.Open("sample.csv.gz")
// 読み取り時の例外処理
if err != nil {
fmt.Println("error")
}
// 関数が終了した際に確実に閉じるようにする
defer o.Close()
// gzipファイルを展開する
f, err := gzip.NewReader(o)
if err != nil {
fmt.Println("gzipエラー")
return
}
defer func() {
_ = f.Close()
}()
// 展開したgzipファイルをCSVファイルとして読み込む
r := csv.NewReader(f)
// csvファイルの中身を読み込
for {
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
fmt.Println("csvエラー")
}
fmt.Println(record)
}
}
実行結果
[id name age]
[1 taro 25]
[2 jiro 20]
[3 saburo 12]