[公告] Golang CSV工具 - 数据转换功能详解

[公告] Golang CSV工具 - 数据转换功能详解 我在我的CSV工具集中添加了一个转换实用程序。它接收CSV输入和一个"text/template"模板,并将该模板应用于CSV的每一行。

展示的示例是从CSV生成SQL INSERT语句。

希望你喜欢!

请查看github.com/mandolyte/csv-utils中的transformcsv

1 回复

更多关于[公告] Golang CSV工具 - 数据转换功能详解的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个非常实用的CSV数据处理工具扩展。通过结合Go标准库的text/template包,你的transformcsv工具为CSV数据转换提供了强大的灵活性。

以下是一个使用示例,展示如何从CSV数据生成SQL INSERT语句:

package main

import (
    "bytes"
    "encoding/csv"
    "fmt"
    "log"
    "text/template"
)

// 示例CSV数据
var csvData = `id,name,age,email
1,John Doe,30,john@example.com
2,Jane Smith,25,jane@example.com
3,Bob Johnson,35,bob@example.com`

// SQL INSERT模板
const sqlTemplate = `INSERT INTO users (id, name, age, email) VALUES ({{.id}}, '{{.name}}', {{.age}}, '{{.email}}');`

func main() {
    // 读取CSV数据
    reader := csv.NewReader(bytes.NewBufferString(csvData))
    records, err := reader.ReadAll()
    if err != nil {
        log.Fatal(err)
    }

    // 解析模板
    tmpl, err := template.New("sql").Parse(sqlTemplate)
    if err != nil {
        log.Fatal(err)
    }

    // 获取表头
    headers := records[0]
    
    // 处理每一行数据
    for i, record := range records {
        if i == 0 { // 跳过表头
            continue
        }
        
        // 创建数据映射
        data := make(map[string]string)
        for j, header := range headers {
            data[header] = record[j]
        }
        
        // 应用模板
        var result bytes.Buffer
        err := tmpl.Execute(&result, data)
        if err != nil {
            log.Fatal(err)
        }
        
        fmt.Println(result.String())
    }
}

输出结果:

INSERT INTO users (id, name, age, email) VALUES (1, 'John Doe', 30, 'john@example.com');
INSERT INTO users (id, name, age, email) VALUES (2, 'Jane Smith', 25, 'jane@example.com');
INSERT INTO users (id, name, age, email) VALUES (3, 'Bob Johnson', 35, 'bob@example.com');

这个实现展示了核心功能:

  • 使用encoding/csv读取CSV数据
  • 通过text/template解析和执行模板
  • 将每行数据映射到模板变量
  • 生成最终的SQL语句

该工具的优势在于模板的灵活性,用户可以轻松修改模板来生成不同格式的输出,比如JSON、XML或其他自定义格式。

回到顶部