如何在Go语言中读取CSV文件并原样输出而非转为切片?
解决Go语言读取CSV后原样输出的问题
你遇到的问题是因为csv.Reader.ReadAll()会把CSV解析成二维字符串切片,直接用fmt.Println()打印就会输出切片的默认格式。要原样输出CSV内容,有几种实用解决方案:
方案1:直接读取原始文件内容输出
如果不需要对CSV内容做结构化处理,只是要原样输出,直接读取文件原始内容是最直接的方式:
package main import ( "fmt" "io" "log" "os" ) func main() { file, err := os.Open("CSV_FILE.csv") if err != nil { log.Fatal("Error reading CSV: ", err) } defer file.Close() content, err := io.ReadAll(file) if err != nil { log.Fatal("Error reading file content: ", err) } fmt.Print(string(content)) }
方案2:解析后重新拼接为CSV格式
如果已经用encoding/csv解析了CSV(比如需要先做数据处理再输出),可以把每个记录的字段用逗号拼接后逐行打印:
package main import ( "encoding/csv" "fmt" "log" "os" "strings" ) func main() { file, err := os.Open("CSV_FILE.csv") if err != nil { log.Fatal("Error reading CSV: ", err) } defer file.Close() reader := csv.NewReader(file) reader.Comma = ',' records, err := reader.ReadAll() if err != nil { log.Fatal("Error reading CSV: ", err) } for _, record := range records { fmt.Println(strings.Join(record, ",")) } }
方案3:用csv.Writer输出标准CSV格式
如果你的CSV包含带逗号的特殊字段(比如"Doe, John"),上面的拼接方式会破坏格式,这时推荐用csv.Writer来保证输出的合规性:
package main import ( "encoding/csv" "log" "os" ) func main() { file, err := os.Open("CSV_FILE.csv") if err != nil { log.Fatal("Error reading CSV: ", err) } defer file.Close() reader := csv.NewReader(file) reader.Comma = ',' records, err := reader.ReadAll() if err != nil { log.Fatal("Error reading CSV: ", err) } writer := csv.NewWriter(os.Stdout) writer.Comma = ',' defer writer.Flush() for _, record := range records { if err := writer.Write(record); err != nil { log.Fatal("Error writing record: ", err) } } }
内容的提问来源于stack exchange,提问作者Shubhankar Sarkar
相关产品推荐
相关产品推荐

