注意:
生成.csv文件时,需写入UTF-8 BOM表头,避免使用excel软件打开.csv文件出现中文乱码
writer.WriteString("\xEF\xBB\xBF")
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"strings"
)
// GenerateCsvFile 通过网络下载原.csv文件,将经过筛选后的行记录(比如去除包含"黑名单"字样的记录),导出到一个新的.csv文件
func GenerateCsvFile(url string) {
fmt.Println("开始导出...")
// csv下载文件示例链接:http://xxx.com/downloads/test.csv
// 下载的csv如果用 ioutil.ReadAll() 读出并转为字符串后,打开后每行单元格间默认是按英文逗号分隔开的txt文本
resp, err := http.Get(url)
if err != nil {
fmt.Println("http.Get err: ", err)
return
}
defer resp.Body.Close()
// 读取下载好的csv文件数据流
byteData, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("ioutil.ReadAll err: ", err)
return
}
// 将csv文件按行分割
rowDataArr := strings.Split(string(byteData), "\n")
if len(rowDataArr) <= 1 {
fmt.Println("仅有表头数据不导出,跳过...")
return
}
// 默认创建.csv格式的文件,体积小,可以直接用excel打开(需要加BOM表头)
file, err := os.OpenFile("./test.csv", os.O_CREATE|os.O_RDWR, 0666)
if err != nil {
fmt.Println("os.OpenFile err: ", err)
return
}
defer file.Close()
// 写入UTF-8 BOM头,避免使用excel软件打开.csv文件出现中文乱码
writer := bufio.NewWriter(file)
writer.WriteString("\xEF\xBB\xBF")
// 遍历文件并循环写入(不适用于大文件,一次性读取操作很占用内存)
for i := 0; i < len(rowDataArr); i++ {
if strings.Contains(rowDataArr[i], "") { // 示例:去除包含"黑名单"字样的记录
continue
}
writer.WriteString(rowDataArr[i] + "\n")
writer.Flush()
}
fmt.Println("导出成功...")
}
func main() {
GenerateCsvFile("http://xxx.com/downloads/xxx.csv") // url示例:xxx.csv
return
}