Go语言使用encoding/csv包可高效读写CSV文件。通过csv.NewReader读取数据,支持自定义分隔符;用csv.NewWriter写入数据,需调用Flush确保写入。读取后可按索引将记录映射为结构体,适合处理带标题的CSV。标准库满足常规需求,无需第三方依赖。

Go语言通过标准库encoding/csv提供了对CSV文件的读写支持,使用简单且高效。处理CSV时不需要引入第三方包,适合大多数常规场景。
读取CSV文件
使用csv.NewReader()包装一个io.Reader(如文件),然后调用ReadAll()或逐行Read()来获取数据。
打开文件后创建*csv.Reader对象 可设置分隔符、是否忽略空行等选项 返回结果是[][]string,每行是一个字符串切片
示例:读取本地CSV文件
file, err := os.Open("data.csv")if err != nil { log.Fatal(err)}defer file.Close()reader := csv.NewReader(file)// 可选:自定义分隔符(默认为逗号)// reader.Comma = ';'records, err := reader.ReadAll()if err != nil { log.Fatal(err)}for _, record := range records { fmt.Println(record) // 每个record是一行字段切片}
写入CSV文件
使用csv.NewWriter()包装io.Writer,通过Write()或WriteAll()写入数据。
立即学习“go语言免费学习笔记(深入)”;
写入前确保目标文件可写(使用os.Create或os.OpenFile) 每次Write()后记得调用w.Flush()确保数据写入 WriteAll()会自动处理批量写入
示例:写入CSV文件
file, err := os.Create("output.csv")if err != nil { log.Fatal(err)}defer file.Close()writer := csv.NewWriter(file)defer writer.Flush() // 确保所有数据被写入data := [][]string{ {"Name", "Age", "City"}, {"Alice", "30", "Beijing"}, {"Bob", "25", "Shanghai"},}err = writer.WriteAll(data)if err != nil { log.Fatal(err)}
处理带标题的结构体数据
虽然encoding/csv不直接支持结构体映射,但可以结合reflect手动实现,或使用第三方库如gocarina/gocsv简化操作。
若只用标准库,常见做法是:
读取第一行为header,建立字段索引映射 后续每行按索引赋值给结构体字段 写入时先写header,再遍历结构体生成记录行
例如将CSV行转为结构体:
type Person struct { Name string Age string City string}var people []Personfor i, record := range records { if i == 0 { continue } // 跳过header people = append(people, Person{ Name: record[0], Age: record[1], City: record[2], })}
基本上就这些。标准库功能足够应对多数CSV读写需求,控制力强且无外部依赖。复杂场景可考虑封装或选用成熟第三方包。
以上就是Golang如何处理CSV文件读写的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1419430.html
微信扫一扫
支付宝扫一扫