Go语言处理CSV数据

csv(Comma-Seperated Vaules), 指以纯文本形式存储表格数据(https://www.rfc-editor.org/rfc/rfc4180.html)。Go语言内置包encoding/csv用来处理csv数据。

写入csv文件:

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

func generateCsv(file *os.File, data []string) error {
	// NewWriter返回一个Writer对象
	writer := csv.NewWriter(file)
	// 调用Write方法将数据写入文件
	err := writer.Write(data)
	if err != nil {
		return err
	}
	writer.Flush()
	return nil
}

func main() {
	var data = map[string][]string{
		"row1": {"id", "name", "score"},
		"row2": {"001", "Jack", "95"},
		"row3": {"002", "John", "73"},
		"row4": {"003", "Robert", "99"},
	}
	
	// os.Create创建文件,创建成功则返回文件指针对象*File
	f, err := os.Create("data.csv")
	if err != nil {
		return
	}

	defer func(file *os.File) {
		err := f.Close()
		if err != nil {
			fmt.Println(err)
		}
	}(f)

	rowsArray := []string{"row1", "row2", "row3", "row4"}
	for _, row := range rowsArray {
		r, ok := data[row]
		if !ok {
			return
		}
		err := generateCsv(f, r)
		if err != nil {
			fmt.Println(err)
			return
		}
	}

}

读取csv文件:

import (
	"encoding/csv"
	"fmt"
	"io"
	"os"
	"path/filepath"
)

func main() {
	// os.Open打开文件,如果打开成功返回一个文件指针对象*File
	// filepath.Join会自动根据操作系统类型将路径拼接到一起,提高代码健壮性
	f, err := os.Open(filepath.Join("data.csv"))
	if err != nil {
		fmt.Println(err)
		return
	}

	defer func(f *os.File) {
		err := f.Close()
		if err != nil {
			fmt.Println(err)
		}
	}(f)

	// NewReader()返回一个Reader结构体
	reader := csv.NewReader(f)
	// 设置字段分隔符。此处为什么采用英文分号";"?因为Reader默认分隔符是因为逗号,此处覆盖默认分隔符(也可以
	// 其他符号,必须是有效的rune类型符号并且不能使用换行”\n或者\r\n“),使其原样输出csv文件内容
	reader.Comma = ';'

	for {
		r, err := reader.Read()
		if err != nil {
			if err == io.EOF {
				break
			} else {
				fmt.Println(err)
				break
			}
		}
		fmt.Println(r)
	}
}

// [id,name,score]
// [001,Jack,95]
// [002,John,73]
// [003,Robert,99]

参考:https://pkg.go.dev/encoding/csv@go1.20.5#Reader.Comma

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 18:05
点赞 评论 收藏
分享
鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务