跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何使用Golang读取CSV文件_解析表格和数据文件

Go标准库encoding/csv包可高效读取CSV文件:先用csv.NewReader包装文件,逐行Read()获取字段切片;需手动映射表头到结构体字段,处理BOM、空行、字段缺失及类型转换;支持自定义分隔符、流式处理和并发解析。 Go语言 标准库 中的
encoding/csv
包提供了简洁、高效的方式读取CSV文件,无需第三方依赖。关键在于正确处理文件打开、 编码 、字段分隔、换行和错误边界。 基础读取:逐行解析CSV内容 使用
csv.NewReader
包装
*os.File
或任意
io.Reader
,调用
Read()
逐行获取
[]string
切片(每行字段)。 确保以只读方式打开文件:
os.Open("data.csv")
用
defer file.Close()
及时释放资源
reader.Read()
返回一行数据,返回
io.EOF
表示结束 注意:默认以逗号分隔,支持带引号字段和换行符(如"hello world") 结构化解析:将CSV映射到Go结构体 标准库不直接支持结构体自动绑定,需手动按列赋值。推荐先读取表头(第一行),再用
map[string]int
建立列名→索引映射,提升可维护性。 调用一次
reader.Read()
获取header切片 遍历header构建字段名到下标的映射,例如
colIndex["name"] = 0
后续每行用该映射安全取值:
row[colIndex["email"]]
对数字、布尔等类型做显式转换(如
strconv.Atoi
),并检查错误 处理 常见问题 :编码、空行与错误容错 真实CSV常含BOM头、空行、缺失字段或类型错误。需主动应对: React Native For Android 源码编译 中文WORD版 本文档主要讲述的是React Native For Android 源码编译;希望对大家会有帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ go语言免费学习笔记(深入) ”; 读取前跳过UTF-8 BOM:
bytes.TrimPrefix(buf, []byte("\xef\xbb\xbf"))
忽略空行:
if len(row) == 0 { continue }
字段数不匹配时,用
len(row)
判断是否截断或补默认值 关键字段缺失或转换失败时,记录日志或跳过该行,避免panic 进阶技巧:流式处理大文件与自定义分隔符 对于GB级CSV,避免全量加载;可结合
bufio.Scanner
或设置
reader.FieldsPerRecord
增强校验。 用
csv.NewReader(bufio.NewReader(file))
减少系统调用开销 设
reader.Comma = '\t'
支持TSV;设
reader.TrimLeadingSpace = true
自动去首尾空格 启用严格模式:
reader.FieldsPerRecord = -1
允许每行字段数不同;设为正整数则校验一致性 配合
goroutine + channel
实现并发解析(注意共享reader需加锁或拆分Reader)

相关文章