package main
import (
"encoding/csv"
"fmt"
"os"
)
func readCsv(fPath string) (ret []map[string]string, k []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, key
}
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 _, 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)
zipData := zipDict(data, "credit_code")
fmt.Println(zipData["313100004250361210"])
}