You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言如何用csv.NewWriter在CSV中写入相邻列的两组数据?

如何用Go的csv.Writer将两组数据写入相邻列?

首先得明确:Go标准库的csv.Writer并没有提供类似普通Writer的“偏移”选项,但我们可以通过合并对应行的数据来实现你要的左右并排效果。

你当前的代码问题在于:每次调用writer.Write(value)都是写入一整行,所以先遍历dataset1写出来的是一列(每行一个单元格),再遍历dataset2写的是下面的另一列,自然是上下堆叠而不是左右相邻。

要实现并排显示,核心思路是把两组数据的对应行合并成一个切片,然后一次性写入这一行。举个具体的例子:

假设你的dataset1和dataset2都是[][]string类型(比如dataset1的每个元素是一行的列数据,dataset2同理),修改后的代码可以这样写:

package main

import (
	"encoding/csv"
	"os"
)

func main() {
	csvOut, err := os.Create("Summary.csv")
	if err != nil {
		// 实际项目里建议换成更优雅的错误处理,比如返回错误
		panic(err)
	}
	defer csvOut.Close()

	writer := csv.NewWriter(csvOut)
	defer writer.Flush()

	// 假设两组数据行数一致,直接合并对应行
	for i := range dataset1 {
		// 把dataset1的当前行和dataset2的当前行合并成一个大切片
		combinedRow := append(dataset1[i], dataset2[i]...)
		if err := writer.Write(combinedRow); err != nil {
			panic(err)
		}
	}
}

如果两组数据的行数不一样,就得处理边界情况——比如其中一组数据提前写完了,后面的行要补上空字符串来对齐列数:

// 先确定两组数据中的最大行数
maxRows := len(dataset1)
if len(dataset2) > maxRows {
	maxRows = len(dataset2)
}

// 提前获取两组数据的列数,用来补空字符串对齐
cols1 := 0
if len(dataset1) > 0 {
	cols1 = len(dataset1[0])
}
cols2 := 0
if len(dataset2) > 0 {
	cols2 = len(dataset2[0])
}

for i := 0; i < maxRows; i++ {
	var row []string

	// 处理dataset1的当前行,没有的话补空
	if i < len(dataset1) {
		row = append(row, dataset1[i]...)
	} else {
		row = append(row, make([]string, cols1)...)
	}

	// 处理dataset2的当前行,没有的话补空
	if i < len(dataset2) {
		row = append(row, dataset2[i]...)
	} else {
		row = append(row, make([]string, cols2)...)
	}

	if err := writer.Write(row); err != nil {
		panic(err)
	}
}

这样就能保证两组数据始终是左右相邻的列,不会出现上下堆叠的情况啦。

内容的提问来源于stack exchange,提问作者Errorum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:38:40