1.2.8 解析CSV数据
Go语言可以通过简单的逐行扫描输入并使用
strings.Split()等函数解析CSV格式Go语言也可以使用
encoding/csv包来处理,encoding/csv包中NewReader()函数返回Reader结构体,该结构体提供了读取CSV文件的API接口解析CSV步骤流程如下:
调用
os.Open()函数打开将要解析的文件,代码如下:file, err := os.Open("test.csv") if err != nil { panic(err) } defer file.Close()调用
encoding/csv包中NewReader()函数返回Reader结构体,并设置Reader结构体的Comma字段来设置分隔符,代码如下:// 返回Reader结构体 reader := csv.NewReader(file) // 设置分隔符 reader.Comma = ";" // reader.FieldsPerRecord = 1备注:
Reader结构体根据需要保留变量来配置读取参数Reader的FieldsPerRecord参数是一个重要设置,如果设置了FieldsPerRecord参数,则会校验每一行的字段计数量是否匹配改参数的值。默认情况下,当设置为0时,则Reader结构体将其设置为第1条记录中的字段数,因此将来的记录必须具有相同的字段计数。如果为正值,则要求每条记录具有给定数量的字段;如果为负值,则不进行校验
还有一个有趣的配置是注释参数,允许开发者在已解析的数据中定义注释字段,本例中,用这种方式忽略整行
// 循环读取 for { record, err := reader.Read() if err != nil { fmr.Println(err) break } fmt.Println(record) }
Go语言禁止使用无意义的逗号和注释设置,这意味着null、回车、换行符、无效的符文和Unicode替换字符等都不能使用,此外,Go语言还禁止将逗号和注释设置为相等,完整示例如下
func main() { file, err := os.Open("test.csv") if err != nil { panic(err) } defer file.Close() reader := csv.NewReader(file) reader.Comma = ';' for { record, err := reader.Read() if err != nil { fmt.Println(err) break } fmt.Println(record) } }结果:
[� � �学号,姓名,分数] [1,Barry,99.5] [2,Ling,100] [3,Jack,88] [4,Dong,68] EOF
Last updated