package cfile import ( "context" "encoding/csv" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" "os" "path" ) var ( headers = []string{ "bid", "area", "city", "projectId", "title", "topType", "detail", "publishTime", "href", "jyHref", "projectName", "projectCode", "projectScope", "budget", "bidAmount", "buyer", "buyerCreditNo", "buyerPerson", "buyerTel", "agency", "agencyPerson", "agencyTel", "bidOpenTime", "bidEndTime", "topScopeClass", "winner", "winnerPerson", "winnerTel", "winnersCreditNo", "winnersEntPerson", "winnersEntTel", "winnersEntMail", } mapping = map[string]string{ "topScopeClass": "s_topscopeclass", "winner": "s_winner", "winnerTel": "winnertel", "winnerPerson": "winnerperson", "bidEndTime": "bidendtime", "bidOpenTime": "bidopentime", "agencyTel": "agencytel", "agencyPerson": "agencyperson", "buyerTel": "buyertel", "buyerPerson": "buyerperson", "bidAmount": "bidamount", "publishTime": "publishtime", "topType": "toptype", } ) func CreateFile(ctx context.Context, data []g.Map, out string) error { dir := path.Dir(out) if err := os.Mkdir(dir, 0755); err != nil { if !os.IsExist(err) { return err } } //生成文件 file, err := os.Create(out) if err != nil { g.Log().Error(ctx, err) return err } defer file.Close() // 创建CSV写入器 writer := csv.NewWriter(file) defer writer.Flush() // 写入标题行 if err := writer.Write(headers); err != nil { g.Log().Errorf(ctx, "Failed to write headers: %v", err) } // 写入数据行 c := splitData(data) for _, record := range c { if err := writer.Write(record); err != nil { g.Log().Errorf(ctx, "Failed to write record: %v", err) } } return nil } func splitData(arr []g.Map) (r [][]string) { for _, m := range arr { var t []string for _, filed := range headers { c, ok := mapping[filed] if ok && c != "" { filed = c } t = append(t, gconv.String(m[filed])) } r = append(r, t) } return r }