• golang csv读取压缩字典


    package main
    
    import (
    	"encoding/csv"
    	"fmt"
    	"os"
    	"unsafe"
    )
    
    func readCsv(fPath string) (ret []map[string]string) {
    	file, err := os.Open(fPath)
    	if err != nil {
    		fmt.Println(err)
    	}
    	defer file.Close()
    	reader := csv.NewReader(file)
    	reader.FieldsPerRecord = -1
    	record, err2 := reader.ReadAll()
    	if err2 != nil {
    		fmt.Println(err2)
    	}
    	var res []map[string]string
    	var key []string
    	for idx, item := range record {
    		if idx == 0 {
    			key = item
    			//fmt.Println(key)
    			continue
    		}
    		var rowDict map[string]string
    		rowDict = make(map[string]string)
    		//res = append(res, item)
    		for i, v := range item {
    			k := key[i]
    			rowDict[k] = v
    		}
    		//fmt.Println(rowDict)
    		res = append(res, rowDict)
    	}
    	return res
    
    }
    
    func zipDict(ret []map[string]string, kCol string) (result map[string][]map[string]string) {
    	/*
    		类似python 默认字典实现
    		{key:[{k:v,k1:v1,k2:v2}]}
    	*/
    	var retMap map[string][]map[string]string
    	retMap = make(map[string][]map[string]string)
    	for _, row := range ret {
    		//fmt.Println(idx + 1)
    		//fmt.Println(row["credit_code"], row["enterprise_name"])
    		kColV := row[kCol]
    		var dataList []map[string]string
    		// 判断key 是否存在 不存在插入数据 存在获取切片追加数据
    		if existDataList, ok := retMap[kColV]; !ok {
    			dataList = append(dataList, row)
    			retMap[kColV] = dataList
    		} else {
    			//existDataList := retMap[kColV]
    			existDataList = append(existDataList, row)
    			retMap[kColV] = existDataList
    		}
    	}
    	return retMap
    }
    
    func main() {
    	
    	fileName := "D:\\tmp\\20220228\\3.csv"
    	data := readCsv(fileName)
    	//fmt.Println(unsafe.Sizeof(data))
    	zipData := zipDict(data, "credit_code")
    	fmt.Println(unsafe.Sizeof(zipData))
    	//for k, v := range zipData {
    	//	fmt.Println(k, v)
    	//}
    	fmt.Println(len(zipData))
    	fmt.Println(zipData["91330283MA2AF845XJ"])
    }
    

      

  • 相关阅读:
    HLS视频直播
    CocoaPods版本升级
    项目管理:CocoaPods建立私有仓库
    cocospod 安装和使用
    sqlite加密
    socket的心跳包机制
    iOS开发必备HUD(透明指示层)
    iOS 第一次安装应用,拒绝相机调用,页面卡死的解决方案
    UINavigationController侧滑滑动返回 卡死问题
    第四周学习进度
  • 原文地址:https://www.cnblogs.com/zzay/p/16012684.html
Copyright © 2020-2023  润新知