1
0
Files
omc_api/lib/core/file/csv.go
2023-10-10 10:56:44 +08:00

89 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package file
import (
"encoding/csv"
"os"
"path/filepath"
"strings"
"ems.agt/lib/log"
)
// 写入CSV文件需要转换数据
// 例如:
// data := [][]string{}
// data = append(data, []string{"姓名", "年龄", "城市"})
// data = append(data, []string{"1", "2", "3"})
// err := file.WriterCSVFile(data, filePath)
func WriterCSVFile(data [][]string, filePath string) error {
// 获取文件所在的目录路径
dirPath := filepath.Dir(filePath)
// 确保文件夹路径存在
err := os.MkdirAll(dirPath, os.ModePerm)
if err != nil {
log.Errorf("创建文件夹失败 CreateFile %v", err)
}
// 创建或打开文件
file, err := os.Create(filePath)
if err != nil {
return err
}
defer file.Close()
// 创建CSV编写器
writer := csv.NewWriter(file)
defer writer.Flush()
// 写入数据
for _, row := range data {
writer.Write(row)
}
return nil
}
// 读取CSV文件转换map数据
func ReadCSVFile(filePath string) []map[string]string {
// 创建 map 存储 CSV 数据
arr := make([]map[string]string, 0)
// 打开 CSV 文件
file, err := os.Open(filePath)
if err != nil {
log.Fatal("无法打开 CSV 文件:", err)
return arr
}
defer file.Close()
// 创建 CSV Reader
reader := csv.NewReader(file)
// 读取 CSV 头部行
header, err := reader.Read()
if err != nil {
log.Fatal("无法读取 CSV 头部行:", err)
return arr
}
// 遍历 CSV 数据行
for {
// 读取一行数据
record, err := reader.Read()
if err != nil {
// 到达文件末尾或遇到错误时退出循环
break
}
// 将 CSV 数据插入到 map 中
data := make(map[string]string)
for i, value := range record {
key := strings.ToLower(header[i])
data[key] = value
}
arr = append(arr, data)
}
return arr
}