Go Csv

目录

go提供了一个读取库encoding

package main

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

//go语言读写csv文件


func main()  {
   //创建一个io对象
   filename:="Person1.csv"
f :=  ReadCsv(filename)
   //WriterCSV(filename)

}

//csv文件读取
func ReadCsv(filepath string) *[][]string {
	//打开文件(只读模式),创建io.read接口实例
	opencast,err:=os.Open(filepath)
	if err!=nil{
		log.Println("csv文件打开失败!")
	}
	defer opencast.Close()

	//创建csv读取接口实例
	reader:=csv.NewReader(opencast)

	//获取一行内容,一般为第一行内容
	//read,_:=reader.Read() //返回切片类型:[chen  hai wei]
	//log.Println(read)

	//读取所有内容
	ReadAll,err:=reader.ReadAll()//返回切片类型:[[s s ds] [a a a]]
	log.Println(ReadAll)
	return &ReadAll

	/*
	  说明:
	   1、读取csv文件返回的内容为切片类型,可以通过遍历的方式使用或Slicer[0]方式获取具体的值。
	   2、同一个函数或线程内,两次调用Read()方法时,第二次调用时得到的值为每二行数据,依此类推。
	   3、大文件时使用逐行读取,小文件直接读取所有然后遍历,两者应用场景不一样,需要注意。
	*/


}
//csv文件写入
func WriterCSV(path string)  {

	//OpenFile读取文件,不存在时则创建,使用追加模式
	File,err:=os.OpenFile(path,os.O_RDWR|os.O_APPEND|os.O_CREATE,0666)
	if err!=nil{
		log.Println("文件打开失败!")
	}
	defer File.Close()

	//创建写入接口
	WriterCsv:=csv.NewWriter(File)
    str:=[]string{"chen1","hai1","wei1"} //需要写入csv的数据,切片类型

	//写入一条数据,传入数据为切片(追加模式)
	err1:=WriterCsv.Write(str)
	if err1!=nil{
		log.Println("WriterCsv写入文件失败")
	}
	WriterCsv.Flush() //刷新,不刷新是无法写入的
	log.Println("数据写入成功...")
}