go - Golang,导入 csv 并将其转换为地图
问题描述
我一直在尝试在 go 中导入一个 csv 文件并将其转换为 map 函数,但这样做有很多困难。我在使用这段代码时遇到的问题是
a) 即使我添加了文件,文件也不会file.Seek(0,0)
从头开始,以便我可以从头开始读取。
b)它没有给我所需格式的输出。我希望输出在 as
输出
map[key1:{abc 123} key2:{bcd 543} key3:{def 735}]
我的 csv 文件是:(输入)
col1 | col2 | col3 键1 | 美国广播公司 | 123 键2 | 光盘 | 543 键3 | 定义 | 735
由于我刚刚转行并且是初学者,如果您能解决我的问题,您将非常感激。
package main
import (
"encoding/csv"
"fmt"
"os"
"strings"
)
func main() {
m := CSVFileToMap()
fmt.Println(m)
}
func CSVFileToMap() (returnMap []map[string]string) {
filePath := "export.csv"
// read csv file
csvfile, err := os.Open(filePath)
if err != nil {
return nil
}
defer csvfile.Close()
csvfile.Seek(0, 0)
reader := csv.NewReader(csvfile)
rawCSVdata, err := reader.ReadAll()
if err != nil {
return nil
}
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 returnMap
}
解决方案
默认情况下,字段分隔符是,
您需要指定使用意图|
reader := csv.NewReader(csvfile)
reader.Comma = '|'
输出
[map[col1:key1 col2: abc col3: 123] map[col1:key2 col2: bcd col3: 543] map[col1:key3 col2: def col3: 735]]
推荐阅读
- php - PHP OOP - 类的函数中不存在 $pdo 变量
- javascript - 如何将 JAVASCRIPT 文件插入到 Odoo11.0 web builder?
- html - 打印匹配除一个之外的所有元素的 css 选择器
- php - 依赖注入总是正确的答案吗?
- wordpress - 在 wordpress 搜索结果页面上添加按钮
- python - python3中的消息缓冲区表示
- javascript - 合并数组中的重复对象并添加其他属性
- java - 我可以在文件(Android)中传递空值吗
- javascript - 如何使 globalCompositeOperationSection 仅影响 save() 和 restore() 上下文?
- google-play-console - 允许第一次发布的版本代码 2?