Go语言中如何使用字符串分隔符写入CSV文件?
如何用字符串分隔符生成类CSV文件(Go语言)
Go标准库的encoding/csv包确实仅支持单个字符作为分隔符(csv.Writer.Comma是rune类型,对应单个Unicode字符),无法直接使用|-|这类字符串分隔符。要实现需求,你可以用以下两种方式:
1. 手动拼接并写入数据
直接自行处理每行字段的拼接、转义逻辑,然后写入文件。这种方式完全可控,不需要依赖第三方库。
示例代码
package main import ( "os" "strings" ) func main() { // 创建输出文件 outFile, err := os.Create("custom_sep.csv") if err != nil { panic(err) } defer outFile.Close() // 定义字符串分隔符 sep := "|-|" // 模拟待写入的数据 rows := [][]string{ {"username", "email", "bio"}, {"john_doe", "john@example.com", "喜欢爬山"}, {"jane_smith", "jane@example.com", "我的签名里有|-|这个分隔符"}, } for _, row := range rows { // 处理每个字段:如果字段包含分隔符、双引号或换行符,用双引号包裹并转义内部的双引号 processedFields := make([]string, len(row)) for idx, field := range row { if strings.Contains(field, sep) || strings.Contains(field, `"`) || strings.Contains(field, "\n") { // 转义字段内的双引号(替换为两个双引号) escaped := strings.ReplaceAll(field, `"`, `""`) processedFields[idx] = `"` + escaped + `"` } else { processedFields[idx] = field } } // 拼接成一行,加上换行符 line := strings.Join(processedFields, sep) + "\n" // 写入文件 if _, err := outFile.WriteString(line); err != nil { panic(err) } } }
注意事项
- 如果字段包含换行符、双引号或分隔符,必须按照类似CSV的规则转义,否则后续解析时会出错。
- 上述代码实现了基础的转义逻辑,你可以根据实际需求调整(比如是否需要支持更多特殊字符)。
2. 使用支持字符串分隔符的第三方库
Go生态中有一些第三方CSV库支持多字符分隔符,你可以在Go Modules中搜索相关包(比如关键词csv multi-character delimiter),选择合适的库来替代标准库。
内容的提问来源于stack exchange,提问作者hbpeng
相关产品推荐
相关产品推荐

