encoding/csv
CSVを読み書きします
「encoding/csv」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
CSVとは
CSV(カンマ区切り値)は、表形式のデータをプレーンテキストで格納します。1行に1レコードを記述し、フィールドをカンマで区切ります。Goのencoding/csvパッケージで読み書きできます。
文字列からの読み取り
任意のio.Readerからリーダーを作成できます。strings.NewReaderは文字列をラップするため、ファイルなしで動作を確認できます。
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
r := csv.NewReader(strings.NewReader("a,b,c"))
rec, _ := r.Read()
fmt.Println(rec)
}すべてのレコードを読み取る
ReadAllはすべての行を[][]stringに読み込みます。内側の各スライスが、1つのレコードのフィールドになります。
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
data := "name,age\nAnn,30\nBob,25"
r := csv.NewReader(strings.NewReader(data))
records, _ := r.ReadAll()
fmt.Println(records)
}行ごとに読み取る
大きなファイルでは、Readを使って1回に1レコードずつ読み取ります。読み取りが完了するとio.EOFを返します。
package main
import (
"encoding/csv"
"fmt"
"io"
"strings"
)
func main() {
r := csv.NewReader(strings.NewReader("a,1\nb,2"))
for {
rec, err := r.Read()
if err == io.EOF {
break
}
fmt.Println(rec)
}
}フィールドへのアクセス
各レコードは文字列のスライスです。インデックスを指定して列を読み取ります。
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
r := csv.NewReader(strings.NewReader("Ann,30"))
rec, _ := r.Read()
fmt.Println("name:", rec[0], "age:", rec[1])
}区切り文字の変更
r.Commaを設定すると、セミコロンやタブなど、別の区切り文字を使用できます。
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
r := csv.NewReader(strings.NewReader("a;b;c"))
r.Comma = ';'
rec, _ := r.Read()
fmt.Println(rec)
}CSVの書き込み
csv.NewWriterはレコードを書き込みます。バッファに溜まったデータを出力するにはFlushを呼び出します。
package main
import (
"encoding/csv"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
w.Write([]string{"name", "age"})
w.Write([]string{"Ann", "30"})
w.Flush()
}複数行の書き込み
WriteAllは[][]string全体を一度に書き込み、自動的にフラッシュします。
package main
import (
"encoding/csv"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
rows := [][]string{{"a", "1"}, {"b", "2"}}
w.WriteAll(rows)
}自動的な引用符付け
ライターは、カンマ、引用符、改行を含むフィールドを引用符で囲むため、出力は有効なCSVのまま保たれます。
package main
import (
"encoding/csv"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
w.Write([]string{"hello, world", "plain"})
w.Flush()
}Flushを忘れない
ライターはデータをバッファリングします。Flushを忘れると(WriteAllを使わない場合)、一部の行が書き込まれないことがあります。プログラムが終了する前に必ずフラッシュしてください。
エラー処理
フラッシュした後、w.Error()を確認して、バッファリング中に発生した書き込みエラーを検出します。
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
w.Write([]string{"x", "y"})
w.Flush()
fmt.Fprintln(os.Stderr, w.Error())
}クイックチェック
CSVリーダーのReadAllは、解析したデータをどのような型で返しますか?
まとめ
encoding/csvには次の特徴があります。
csv.NewReaderとReadまたはReadAllを使いますcsv.NewWriterでWrite/WriteAllを使い、その後Flushを呼び出しますCommaで区切り文字を変更でき、引用符付けは自動的に行われます
よくある質問
「encoding/csv」レッスンは無料ですか?
はい。「encoding/csv」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「encoding/csv」で何を学びますか?
CSVを読み書きします ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「encoding/csv」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- encoding/jsonのおさらい
- encoding/xml
- encoding/csv
- gobとバイナリエンコーディング