Go语言提供了很便捷的方法来读写CSV格式的文件,就是使用encoding/csv包来处理。
生成CSV文件
首先调用os.Create()函数来创建一个".csv"文件,os.Create()函数的定义如下:
func Create(name string)(*File,error)
成功则会返回文件指针对象*File.
然后调用*File对象的WriteString()方法来设置写入文件的内容为字符串类型。WriteString()定义如下:
func(f *File)WriteString(s string)(n int,err error)
接下来,通过传递*File指针对象调用NewWriter()来得到Write()方法对csv文件进行写入数据,定义如下:
func NewWriter(f *File) *Writer
func(w *Writer) Writer(record []string) error
最后写一个生成test.csv文件的例子:
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
f, err := os.Create("test.csv")
if err != nil {
fmt.Printf("err msg:%s", err)
return
}
defer f.Close()
f.WriteString("\xEF\xBB\xBF")
w := csv.NewWriter(f)
w.Write([]string{"num", "name", "age"})
w.Write([]string{"1", "xiaobai", "18"})
w.Write([]string{"2", "lidong", "27"})
w.Write([]string{"3", "zhangshan", "50"})
w.Flush()
}
运行之后,可以查看文件内容:
解析CSV文件
encoding/csv包中的NewReader()函数返回*Reader对象,Reader对象尅设置Comma字段来设置分隔符,Reader对象提供Read()方法来读取CSV文件中的数据,每次读取一行的内容,并按照分隔符来显示。
代码示例:
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
f, err := os.Open("./test.csv")
if err != nil {
fmt.Printf("err msg:%s", err)
return
}
defer f.Close()
reader := csv.NewReader(f)
reader.Comma = ';'
for {
record, e := reader.Read()
if e != nil {
fmt.Println(e)
break
}
fmt.Println(record)
}
}
输出:
[num,name,age]
[1,xiaobai,18]
[2,lidong,27]
[3,zhangshan,50]
EOF