如何在Golang中处理CSV文件_Golang CSV文件读写操作示例

12次阅读

go 标准库 encoding/csv 提供高效 CSV 读写能力,需注意分隔符、引号、换行、Flush 和 UTF-8 编码(推荐无 bom)等细节,支持流式处理与错误检查。

如何在Golang中处理CSV文件_Golang CSV文件读写操作示例

Go 语言标准库 encoding/csv 提供了简洁、高效的 CSV 文件读写能力,无需第三方依赖。关键在于理解 csv.Readercsv.Writer 的使用方式,注意编码、分隔符、引号、换行等细节。

读取 CSV 文件(按行或按记录)

使用 os.Open 打开文件,再传给 csv.NewReader。推荐用 ReadAll() 一次性读取全部数据(适合中小文件),或用循环调用 Read() 逐行处理(适合大文件、流式场景)。

  • 默认分隔符是逗号(,),如需其他(如制表符),可设置 reader.Comma = 't'
  • CSV 字段含换行、逗号或双引号时,会自动被双引号包裹;csv.Reader 默认能正确解析
  • 首行常为表头,可用 Read() 先读一次获取 header,后续每行用 map[String]string 关联字段

写入 CSV 文件(手动构造或结构体映射)

os.Create 创建文件,包装为 csv.NewWriter。写入前建议调用 writer.Write(header) 写表头。每条记录调用 writer.Write([]string{...}) 即可。

  • 写入后必须调用 writer.Flush(),否则缓冲区内容可能丢失
  • 若字段含双引号、换行符,csv.Writer 会自动加引号并转义,无需手动处理
  • 如需导出结构体,可先用反射或手动提取字段值转为 []string,再写入

处理中文与 UTF-8 编码问题

Go 原生字符串是 UTF-8,只要文件本身保存为 UTF-8(无 BOM 推荐),读写不会乱码。但 windows 记事本默认保存为 GBK 或带 BOM 的 UTF-8,易出错。

立即学习go语言免费学习笔记(深入)”;

  • 读取前可用 golang.org/x/text/encoding 检测并转换编码(如 GBK → UTF-8),但更稳妥的是统一要求源文件为 UTF-8(无 BOM)
  • 写入时,可开头写入 UTF-8 BOM(xEFxBBxBF)让 excel 正确识别中文(仅 windows Excel 需要,非必须)

错误处理与性能提示

CSV 解析可能在任意行失败(格式错误、字段数不一致等),应始终检查 err。对大文件,避免全量加载到内存,优先用流式读写。

  • Read() 返回 []stringError,空切片 + io.EOF 表示结束
  • csv.NewReader(bufio.NewReader(file)) 包一层可提升小文件读取效率
  • 并发写多个 CSV?确保每个 *csv.Writer 独立,且写入时加锁或使用 channel 序列化

基本上就这些。标准库够用,逻辑清晰,不复杂但容易忽略 Flush 和编码细节。

text=ZqhQzanResources