读写csv文件的方式很多,对于csv文件比较大的,比较有效的读写方式是使用"encoding/csv"库。代码如下:
package main
import (
"encoding/csv"
"fmt"
"io"
"log"
"os"
)
func main() {
// 打开文件
file, err := os.Open("large_file.csv")
if err != nil {
panic(err)
}
defer func(file *os.File) {
err := file.Close()
if err != nil {
log.Fatal("文件关闭失败", err)
}
}(file)
// 创建CSV读取器
reader := csv.NewReader(file)
reader.Comma = ',' // 默认使用逗号作为分割符,也可以自定义分隔符
// 读取CSV文件
for {
record, err := reader.Read()
if err == io.EOF {
break
} else if err != nil {
panic(err)
}
// 处理record
fmt.Println(record)
// 打印第一个字段
fmt.Println(record[0])
}
}
如果要追加写入,则使用以下程序段:
package main
import (
"encoding/csv"
"log"
"os"
)
func main() {
// 如果没有文件,则新建文件,然后追加写入,如果写入的文件存在,则追加
file, err := os.OpenFile("large_file.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
// 写入CSV文件
for _, record := range [][]string{
{"1", "Alice", "30"},
{"2", "Donshu", "50"},
// ...
} {
err := writer.Write(record)
if err != nil {
panic(err)
}
}
}