由于最近做项目从Amazon的api中拉取商家的月度报告,而拉下来的文件格式为CSV ,所以我需要吧CSV的内容读取出来并且存入数据库。在其中
什么是 CSV逗号分隔值( Common - Sparated Values,CSV,有时候也称为字符分隔值,因为分隔字符也可以不是逗号)。
其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字,那样被解读的数据。
字段
go 语言csv 包——golang解析csv文件到struct
假如需要被导入的文件是这样的
type Info struct{
a string
b string
c string
}
//struct slice
infos := []Info{}
_ = csvreader.New().UnMarshalFile("file.csv",&infos)
body,_ := json.Marshal(infos)
fmt.Println(string(body))
//point slice
infos = []*Info{}
_ = csvreader.New().UnMarshalFile("file.csv",&infos)
body,_ := json.Marshal(infos)
fmt.Println(string(body))
如果CSV文件首行不包括header
如果解析的时候CSV 文件不是以逗号分隔
可以修改其中的 Comma 字段来修改读取文件的分隔符,但有规定一些字符是不可以当作读取文件的分隔符的(如 换行符/n)
一些坑点
首先得判断是否 utf - 8
其实除了utf-8 还有 utf-8 bom 这种编码格式
只要设置了其中一个参数为 true 即可解决这个报错
(我选择的是方案一)
Golang 中的 csv reader 会检查每一行的字段的数量,如果不等于 FieldsPerRecord 就会抛出错误。
- 当这个值为 负值时不检查!
- 0 是默认值,会检查第一行的字段数量融合赋值给 FiledsPerRecord
解决办法就是设置其为 -1