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

如何在Golang中逐行读取TSV文件并处理指定列数据

如何在Go中逐行读取TSV文件并处理指定列

需求与参考实现

我需要用Go语言实现逐行读取TSV文件,并对其中某一列的数据进行处理。我的TSV数据结构如下:

foobarbaz
1210
2350

对应的C++实现代码如下,功能是跳过表头、对第三列数据求和:

ifstream iFile("input.tsv");
iFile >> str >> str >> str; // 跳过首行
int sum = 0;
while (iFile >> x >> y >> w)
{
    sum += w; // 对第三列做简单求和处理
}

遇到的问题

我尝试用Go实现相同功能,但遇到了数据拆分的问题。我的尝试代码如下:

file, _ := os.Open("input.tsv")
defer file.Close()
csvReader := csv.NewReader(file)
csvReader.Comma = '\t'
for {
    rec, err := csvReader.Read()
    fmt.Printf("%+v\n", rec[0])
}

运行后输出的是整行未拆分的字符串:

1   2   10
2   3   50

我无法将每行拆分为独立的x、y、w元素,希望能得到切片形式来直接访问第三个元素w。

问题解决与注意事项

问题已解决,正确的Go代码可以将每行按制表符拆分为字符串切片:
当TSV文件格式规范(使用制表符分隔字段)时,输出结果为:

[]string{"1", "2", "10"}
[]string{"2", "3", "50"}

但需要注意:如果文件实际是用多个空格而非制表符分隔字段,csv.Reader会将整行作为单个元素返回:

[]string{"1   2   100"}
[]string{"2   3   50"}

这种情况不符合预期,需要确保文件是标准的TSV格式(制表符分隔)。

内容的提问来源于stack exchange,提问作者M.Dara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:19:57