golang 读取并解析 csv 文件

文章目录

    从百度统计后台导出并下载了实时访客的 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式