golang操作csv文件

golang操作csv文件

游戏|数码彩彩2024-04-11 7:37:10351A+A-
golang操作csv文件

 

日常中经常需要使用 golang 读写 csv 文件,比如将数据库中的数据按照要求导出到 csv 中,读取 csv 文件中的数据到内存中进行处理等操作。

ps: 如果是 Excel 文件(*.xlsm、.xls、.xlt 等格式结尾),需要将其另存为 .csv 格式的文件,才能操作。

package main

import (
	"bufio"
	"encoding/csv"
	"fmt"
	"io"
	"os"
)

var fileName = "./test.csv"

func main() {
	writeFile()
	readFile()
}

func writeFile() {
	file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR, 0644)
	if err != nil {
		fmt.Println("open file is failed, err: ", err)
	}
	defer file.Close()

	// 写入UTF-8 BOM,防止中文乱码
	file.WriteString("\xEF\xBB\xBF")
	w := csv.NewWriter(file)
	w.Write([]string{"开发者名称", "开发者邮箱", "应用名称"})
	w.Write([]string{"Ann", "Ann@126.com", "开心消消乐"})
	w.Write([]string{"Jony", "Jony@126.com", "微信"})
	// 写文件需要flush,不然缓存满了,后面的就写不进去了,只会写一部分
	w.Flush()
}

func readFile() {
	// 必须关闭文件后重新打开,才会读出刚才写入的数据
	file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR, 0644)
	if err != nil {
		fmt.Println("open file is failed, err: ", err)
	}
	defer file.Close()
	r := bufio.NewReader(file)
	for {
		b, err := r.ReadBytes('n')
		// 会把一行中最后的 n 也读取出来,可以使用 TrimSpace 清空 n
		// b = bytes.TrimSpace(b)
		// b, err := buf.ReadString('n')
		if err != nil {
			if err == io.EOF {
				break
			}
			fmt.Println("err = ", err)
			return
		}
		fmt.Println(string(b))
	}
}
golang操作csv文件

 

运行结果

golang操作csv文件

 

点击这里复制本文地址 版权声明:本文内容由网友提供,该文观点仅代表作者本人。本站(https://www.angyang.net.cn)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

昂扬百科 © All Rights Reserved.  渝ICP备2023000803号-3网赚杂谈