从百度统计后台导出并下载了实时访客的 CSV 文件。想本地解析一下,并导入到 MySQL 中做备份,因为百度统计只能保留两个周的历史数据,且上限为5000条。
golang 解析 csv 代码
这里用到了 golang 内置的 "encoding/csv" 库,能自动读取一行 csv 数据,并返回 slice 类型的数据。
package main
import (
"encoding/csv"
"fmt"
iconv "github.com/djimenez/iconv-go"
"io"
"log"
"os"
)
func main() {
// Open the file
csvfile, err := os.Open("2020-05-21.csv")
if err != nil {
log.Fatalln("Couldn't open the csv file", err)
}
defer csvfile.Close()
// Parse the file
r := csv.NewReader(csvfile)
// Iterate through the records
for {
// Read each record from csv
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Printf("Record has %d columns.\n", len(record))
city, _ := iconv.ConvertString(record[2], "gb2312", "utf-8")
fmt.Printf("%s %s %s \n", record[0], record[1], city)
}
}
编码转换
百度统计导出的 CSV 非常奇葩,文件编码为 latin1, 导致里面的中文显示为乱码。
想都不用想,百度肯定还在用 gb2312,所以需要将包含中文的字段做编码转换。这里用到了这个库
github.com/djimenez/iconv-go
解析结果
以一行数据为例:
Record has 28 columns.
1027 2020/05/21 00:04:17 包头
继续阅读
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式