如何在Golang中逐行读取TSV文件并处理指定列数据
如何在Go中逐行读取TSV文件并处理指定列
需求与参考实现
我需要用Go语言实现逐行读取TSV文件,并对其中某一列的数据进行处理。我的TSV数据结构如下:
| foo | bar | baz |
|---|---|---|
| 1 | 2 | 10 |
| 2 | 3 | 50 |
对应的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
相关产品推荐
相关产品推荐

