CSV 파일 읽고 쓰기

1. CSV 파일 읽기

Go에서 CSV(Comma Separated Values) 파일을 처리하기 위해 "encoding/csv" 패키지를 사용한다. csv 패키지는 CSV 파일을 읽거나 쓰는 기능을 제공한다.

CSV 파일을 읽기 위해선 먼저 csv.NewReader() 를 실행하여 csv 파일 포맷을 읽을 수 있는 Reader를 생성하고, 이 리더로부터 Read() 혹은 ReadAll() 메서드를 호출하여 데이타를 읽어들인다. Read()는 한 라인을 읽어 들이고, ReadAll()은 전체를 한꺼번에 읽어들인다.

아래 예제는 test.csv 파일을 ReadAll()을 사용하여 모두 읽어 들여 [][]string 슬라이스에 넣은 후, for 루프를 사용하여 각 Cell의 내용을 출력하는 코드이다.

package main

import (
	"bufio"
	"encoding/csv"
	"fmt"
	"os"
)

func main() {
	// 파일 오픈
	file, _ := os.Open("./test.csv")

	// csv reader 생성
	rdr := csv.NewReader(bufio.NewReader(file))

	// csv 내용 모두 읽기
	rows, _ := rdr.ReadAll()

	// 행,열 읽기
	for i, row := range rows {
		for j := range row {
			fmt.Printf("%s ", rows[i][j])
		}
		fmt.Println()
	}
}

2. CSV 파일 쓰기

CSV 파일을 쓰기 위해서는 csv.NewWriter() 를 실행하여 CSV 포맷으로 쓸 수 있는 Writer를 생성하고, 이 Writer로부터 Write() 혹은 WriteAll() 메서드를 호출하여 데이타를 쓰게된다. Write()는 하나의 레코드를 쓰고, WriteAll()은 전체 레코드를 한꺼번에 쓰고 Flush를 호출한다.

package main

import (
	"bufio"
	"encoding/csv"
	"os"
)

func main() {
	// 파일 생성
	file, err := os.Create("./output.csv")
	if err != nil {
		panic(err)
	}

	// csv writer 생성
	wr := csv.NewWriter(bufio.NewWriter(file))

	// csv 내용 쓰기
	wr.Write([]string{"A", "0.25"})
	wr.Write([]string{"B", "55.70"})
	wr.Flush()
}