go语言中使用encoding/csv包可高效处理csv文件读写。读取时用csv.newreader创建读取器,通过readall一次性读取或read逐行处理;写入时用csv.newwriter创建写入器,调用write或writeall添加数据并需调用flush提交;支持设置分隔符、注释字符等配置项,并需注意首行处理、错误处理及大文件内存控制。
读取和写入 CSV 文件在 Go 语言中非常常见,尤其是处理数据导入导出、日志分析等场景。Go 标准库中的 encoding/csv 包已经提供了简洁又实用的 API 来完成这些操作,不需要引入额外依赖。
读取 CSV 文件的核心是使用 csv.NewReader 创建一个读取器,然后通过 ReadAll 或逐行读取的方式获取数据。
import ( "encoding/csv" "os" ) file, err := os.Open("data.csv") if err != nil { // 处理错误 } defer file.Close() reader := csv.NewReader(file) records, err := reader.ReadAll()
上面这段代码会一次性把整个 CSV 文件的内容读进来,结果是一个二维字符串切片([][]string),每一项代表一行记录,每行又是多个字段组成的字符串数组。
立即学习“go语言免费学习笔记(深入)”;
如果你希望按行处理,比如文件很大或者需要边读边处理,可以这样:
for { record, err := reader.Read() if err == io.EOF { break } // 处理每一行数据 }
小提示:如果 CSV 文件包含表头,可以在读完后跳过第一行,或者用结构体映射字段名来提升可读性。
写入 CSV 的流程也很简单:创建一个写入器,然后调用 Write 方法添加每一行数据,最后记得调用 Flush 提交写入。
file, _ := os.Create("output.csv") defer file.Close() writer := csv.NewWriter(file) writer.Write([]string{"name", "age", "city"}) writer.Write([]string{"Alice", "30", "Beijing"}) writer.Flush()
如果你想批量写入多条数据,可以用 WriteAll:
rows := [][]string{ {"name", "age", "city"}, {"Bob", "25", "Shanghai"}, {"Charlie", "28", "Guangzhou"}, } writer.WriteAll(rows)
注意:每次写入之后都要调用 Flush(),否则可能有部分内容还在缓冲区没有落盘。如果你忘了,那写出来的文件内容可能是不完整的。
默认情况下,encoding/csv 假设你用的是逗号作为字段分隔符。但有些时候 CSV 文件可能用了别的符号,比如制表符 \t,这时候就需要自定义配置了。
reader := csv.NewReader(file) reader.Comma = '\t' // 改成制表符分隔
类似的,写入时也可以设置:
writer := csv.NewWriter(file) writer.Comma = '\t'
除了分隔符,还有几个常用配置项:
基本上就这些。只要掌握了 NewReader 和 NewWriter 的基本用法,配合一些配置参数,就可以应对大部分 CSV 文件的读写需求了。
以上就是Golang如何读取和写入CSV文件 展示encoding/csv的典型用法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号