我想从磁盘将csv文件读取为[] map [string] string数据类型。其中[] slice是行号,而map [“ key”]是csv文件的标题(第1行)。
我无法在标准库中找到任何东西来完成此任务。
答案 0 :(得分:-3)
基于回复,听起来像ioutil这样的标准库中没有东西可以将csv文件读取到地图中。
以下提供了csv文件路径的函数会将其转换为map [string] string的切片。
package main
import (
"os"
"encoding/csv"
"fmt"
"strings"
)
// CSVFileToMap reads csv file into slice of map
func CSVFileToMap(filePath string) (returnMap []map[string]string, err error) {
// read csv file
csvfile, err := os.Open(filePath)
if err != nil {
return nil, fmt.Errorf(err.Error())
}
defer csvfile.Close()
reader := csv.NewReader(csvfile)
rawCSVdata, err := reader.ReadAll()
if err != nil {
return nil, fmt.Errorf(err.Error())
}
header := []string{} // holds first row (header)
for lineNum, record := range rawCSVdata {
// for first row, build the header slice
if lineNum == 0 {
for i := 0; i < len(record); i++ {
header = append(header, strings.TrimSpace(record[i]))
}
} else {
// for each cell, map[string]string k=header v=value
line := map[string]string{}
for i := 0; i < len(record); i++ {
line[header[i]] = record[i]
}
returnMap = append(returnMap, line)
}
}
return
}