发布时间:2024-10-22 14:01
注意: 生成.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
}