golang 解析 csv 文件报错 parse error: extraneous or missing " in quoted-field

更新日期: 2020-06-22 阅读次数: 603 字数: 365 分类: golang

解析百度统计 CSV 日志的系统运行了快一个月,没有出现问题。但是今天早上突然报错退出:

> import_log /mnt/d/to_del/2020-06-20.csv
2020/06/22 07:55:18 parse error on line 686, column 60: extraneous or missing " in quoted-field

对应的 CSV 文件数据行为类似这样的结构,报错点在“烟台”前的一个双引号上。

"515","2020/06/20 13:07:08","烟台 "golang" (www)", "Windows 10"

可见,百度 CSV 文件没有对双引号进行转义。

哪里报错的呢

怎么知道具体是哪行 golang 代码报错的呢?

log.Fatal 是否会导致程序退出

我实际测试 log.Println 并不会导致程序退出,而 log.Fatal 会。

查了一个文档,确实是这样:

log.Fatal is equivalent to Print() followed by a call to os.Exit(1).

那么,很自然的,就会猜测是 log.Fatal 那行导致程序退出。

for {
	// Read each record from csv
	record, err := r.Read()
	if err == io.EOF {
		break
	}
	if err != nil {
		log.Fatal(err)
	}

	parseRecord(record)
}

忽略此行

for {
	// Read each record from csv
	record, err := r.Read()
	if err == io.EOF {
		break
	}

	if err != nil {
		log.Println(err)
		log.Println("Ignore")
	} else {
		parseRecord(record)
	}
}

除了忽略这行数据,还有什么其他方法

因为使用双引号,在搜索时是比较常用的做法,双引号代表必须包含这个关键词。

目前这种忽略的做法,非常不严谨。

// TODO

领取阿里云/腾讯云服务器优惠券

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊, 查看更多联系方式。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。同时也欢迎关注我的微信公众号“大象工具”: 大象工具微信公众号

tags: golang csv

相关文章

爱评论不评论

近期节日

2020年10月22日 世界传统医药日
2020年10月23日 霜降
2020年10月24日 联合国日
2020年10月25日 重阳节
2020年10月31日 世界勤俭日
2020年11月01日 万圣节
2020年11月07日 立冬
2020年11月08日 中国记者日
2020年11月10日 世界青年节
2020年11月11日 光棍节
2020年11月14日 世界糖尿病日
2020年11月17日 国际大学生节
查看更多节日