Go语言中encoding/csv包用于读写CSV文件,支持标准及自定义分隔符的解析与生成,能自动处理带引号字段。1. 使用csv.NewReader读取文件或字符串数据,可调用ReadAll()一次性读取或循环Read()逐行读取;2. 使用csv.NewWriter写入数据到文件或缓冲区,需调用Flush()确保数据写入;3. 支持自定义分隔符,如制表符或分号,通过设置Comma字段实现;4. 自动处理含逗号、换行等特殊字符的字段,无需手动解析引号内容。示例涵盖打开文件、创建读写器、遍历记录、错误处理及资源释放全过程,适用于报表导出、配置导入等场景。

在Go语言中,encoding/csv 包提供了对CSV(逗号分隔值)文件的读写支持。它属于标准库,无需额外安装,适合处理结构化数据,比如导出报表、导入配置或解析日志。下面通过具体示例说明如何使用它进行CSV文件的读取与写入。
读取CSV文件
使用 csv.NewReader 可以从任何实现了 io.Reader 接口的对象中读取数据,常见的是从文件或字符串中读取。
以下是从本地CSV文件读取所有记录的示例:
package mainimport ( "encoding/csv" "fmt" "os")func main() { // 打开CSV文件 file, err := os.Open("data.csv") if err != nil { fmt.Println("打开文件失败:", err) return } defer file.Close() // 创建CSV读取器 reader := csv.NewReader(file) // 读取所有行 records, err := reader.ReadAll() if err != nil { fmt.Println("读取CSV失败:", err) return } // 遍历输出每一行 for _, record := range records { fmt.Println(record) }}
假设 data.csv 内容如下:
立即学习“go语言免费学习笔记(深入)”;
姓名,年龄,城市张三,25,北京李四,30,上海
运行程序将输出:
[姓名 年龄 城市][张三 25 北京][李四 30 上海]
如果想逐行读取以节省内存(适合大文件),可以使用 reader.Read():
for { record, err := reader.Read() if err == io.EOF { break } if err != nil { fmt.Println("读取出错:", err) return } fmt.Println(record)}
写入CSV文件
使用 csv.NewWriter 可以将数据写入任何实现了 io.Writer 接口的对象,如文件或缓冲区。
以下示例将数据写入新的CSV文件:
package mainimport ( "encoding/csv" "os")func main() { // 创建或清空文件 file, err := os.Create("output.csv") if err != nil { fmt.Println("创建文件失败:", err) return } defer file.Close() // 创建CSV写入器 writer := csv.NewWriter(file) defer writer.Flush() // 确保所有数据写入磁盘 // 准备要写入的数据 data := [][]string{ {"姓名", "年龄", "城市"}, {"张三", "25", "北京"}, {"李四", "30", "上海"}, } // 逐行写入 for _, record := range data { err := writer.Write(record) if err != nil { fmt.Println("写入失败:", err) return } }}
执行后会生成 output.csv 文件,内容为:
姓名,年龄,城市张三,25,北京李四,30,上海
注意: 必须调用 writer.Flush(),否则数据可能不会真正写入文件。
处理带引号或特殊字符的字段
CSV规范允许字段包含逗号、换行符或引号,这时需要使用双引号包裹字段。encoding/csv 会自动处理这些情况。
例如,某个字段包含逗号:
data := [][]string{ {"用户", "地址"}, {"王五", "广东省,深圳市"},}
写入后CSV内容为:
用户,地址王五,"广东省,深圳市"
读取时也会正确解析带引号的字段,无需手动处理。
自定义分隔符
有些CSV文件使用制表符(TSV)或其他字符作为分隔符。可以通过设置 Comma 字段来自定义:
reader := csv.NewReader(file)reader.Comma = 't' // 使用制表符分隔writer := csv.NewWriter(file)writer.Comma = ';' // 使用分号分隔
这在处理非标准格式时非常有用。
基本上就这些。encoding/csv 简单高效,配合 os 和 bufio 可轻松完成大多数CSV操作。不复杂但容易忽略细节,比如 Flush 和错误处理,写生产代码时要格外注意。
以上就是如何使用Golang encoding/csv处理CSV文件_Golang CSV文件读写示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1428677.html
微信扫一扫
支付宝扫一扫