Golang如何使用 encoding/csv 处理 CSV 文件_Golang CSV 数据解析与写入实践


Go语言中encoding/csv包用于高效处理CSV文件,支持读取和写入操作。首先使用csv.NewReader读取数据,可调用ReadAll一次性读取或Read逐行读取以节省内存;示例展示了从字符串读取CSV并输出各行内容。接着通过csv.NewWriter写入数据到缓冲区或文件,需调用Flush确保数据写入,并检查Error方法获取错误信息。处理中文时默认支持UTF-8,若源文件为GBK等编码,需借助golang.org/x/text/encoding/simplifiedchinese进行解码转换。对于非逗号分隔的CSV,可通过设置Reader或Writer的Comma字段来自定义分隔符,如分号或制表符。综上,只需注意编码、分隔符及Flush操作,即可稳定处理各类CSV场景。

golang如何使用 encoding/csv 处理 csv 文件_golang csv 数据解析与写入实践

在 Go 语言中,encoding/csv 包提供了处理 CSV(逗号分隔值)文件的简单而高效的方式。无论是读取用户上传的数据、导出报表,还是与其他系统交换数据,CSV 都是常见格式。本文将通过实际示例展示如何使用该包进行 CSV 数据的解析与写入。

读取 CSV 文件

要从文件或字符串中读取 CSV 数据,可以使用 csv.NewReader 创建一个读取器,然后调用其 ReadAll 或逐行读取 Read 方法。

示例:从字符串读取 CSV 数据

package main

import (
    "encoding/csv"
    "fmt"
    "strings"
)

func main() {
    csvData := `姓名,年龄,城市
张三,25,北京
李四,30,上海
王五,28,深圳`

    reader := csv.NewReader(strings.NewReader(csvData))
    records, err := reader.ReadAll()
    if err != nil {
        fmt.Println("读取失败:", err)
        return
    }

    for i, record := range records {
        fmt.Printf("第%d行: %v\n", i+1, record)
    }
}

输出结果:

第1行: [姓名 年龄 城市]
第2行: [张三 25 北京]
第3行: [李四 30 上海]
第4行: [王五 28 深圳]

如果数据量较大,建议逐行读取以节省内存:

for {
    record, err := reader.Read()
    if err == io.EOF {
        break
    }
    if err != nil {
        fmt.Println("读取出错:", err)
        break
    }
    fmt.Println(record)
}

写入 CSV 文件

使用 csv.NewWriter 可将数据写入文件或缓冲区。写入后记得调用 Flush 确保数据落盘。

示例:写入 CSV 到字符串缓冲区

package main

import (
    "encoding/csv"
    "fmt"
    "strings"
)

func main() {
    var buf strings.Builder
    writer := csv.NewWriter(&buf)

    // 写入表头
    writer.Write([]string{"姓名", "年龄", "城市"})
    // 写入数据行
    writer.Write([]string{"赵六", "32", "广州"})
    writer.Write([]string{"钱七", "29", "杭州"})

    // 必须调用 Flush
    writer.Flush()

    if err := writer.Error(); err != nil {
        fmt.Println("写入失败:", err)
        return
    }

    fmt.Println(buf.String())
}

若要写入文件,只需将 *os.File 传给 NewWriter:

Primeshot Primeshot

专业级AI人像摄影工作室

Primeshot 36 查看详情 Primeshot
file, _ := os.Create("output.csv")
defer file.Close()
writer := csv.NewWriter(file)
// ... 写入逻辑
writer.Flush()

处理中文与编码问题

CSV 本身不包含编码信息,Go 的 encoding/csv 默认处理 UTF-8。如果源文件是 GBK 或其他编码,需先转换为 UTF-8。

例如使用 golang.org/x/text/encoding/simplifiedchinese 处理 GBK 编码文件:

import (
    "golang.org/x/text/encoding/simplifiedchinese"
    "golang.org/x/text/transform"
)

file, _ := os.Open("data.csv")
defer file.Close()

decoder := simplifiedchinese.GBK.NewDecoder()
reader := csv.NewReader(transform.NewReader(file, decoder.Transform()))

records, _ := reader.ReadAll()

这样可避免中文乱码问题。

自定义分隔符

并非所有“CSV”都用逗号,有些使用制表符或分号。可通过设置 Comma 字段修改分隔符。

示例:读取以分号分隔的 CSV

reader := csv.NewReader(strings.NewReader(data))
reader.Comma = ';'  // 设置分隔符为分号
records, _ := reader.ReadAll()

同样适用于写入:

writer := csv.NewWriter(&buf)
writer.Comma = '\t' // 使用制表符

基本上就这些。encoding/csv 虽然简单,但足够应对大多数场景。只要注意编码、分隔符和 Flush,就能稳定处理 CSV 数据。

以上就是Golang如何使用 encoding/csv 处理 CSV 文件_Golang CSV 数据解析与写入实践的详细内容,更多请关注其它相关文章!


# golang  # go  # 可通过  # 只需  # 器中  # 如何使用  # 分隔符  # csv文件  # 上海  # ai  # csv  # 中文乱码  # 编码  # go语言  # 深圳  # 红河seo网站建设  # 海淀企业的网站建设  # 浙江视频营销推广案例  # 合肥抖音推广营销好做吗  # 宝鸡专业网站建设企业  # 唱歌营销推广  # 李四  # 都是  # 北京  # 龙华seo优化价格  # 武汉哪里有培训seo的  # 关于小米的seo文章  # 上海网站推广威心hfqjwl作词 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 《随手记》关闭首页消息推送方法  顺丰快递单号查询寄件人 顺丰寄件人查询入口  《华夏千秋》龙女试炼功法获取方法  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程  uc浏览器官网网页版使用 uc浏览器官网免费在线首页  《小宇宙》标记不友善评论方法  发博客与长微博技巧  抖音商城官网是什么_抖音商城官方网址与访问方法  稻壳阅读器官方直达网址链接 稻壳阅读器文档阅读平台主页资源入口  漫蛙漫画直连入口 _ manwa官方备用入口实时检测  PHP多语言网站的实现:会话管理与翻译函数优化教程  PHP中实现JSON数据数组分页的教程  冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤  mysql如何配置从库只读_mysql从库只读设置方法  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  不吃碳水化合物是健康减肥的好办法吗  cad视图选项卡不见了怎么办_cad视图标签恢复显示方法  163邮箱网页版官方登录入口 163邮箱网页版访问页面  优化Asyncio嵌套函数调度:使用生产者-消费者模式实现并发流处理  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  火柴人战争网页版在线玩  《磁力猫》最好用的磁官网  《战地6》反作弊已成功拦截240万次作弊 发售第一周98%比赛没有作弊  顺丰快递在线查询系统 顺丰快递官方查单入口  Golang如何使用log记录日志信息_Golang log日志记录方法总结  微信客户端如何找回密码_微信客户端忘记密码找回方法  Flash AS3.0简易相册制作  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  《淘宝联盟》推广自己的店铺方法  《绿竹漫游》关闭消息通知方法  C++ optional用法详解_C++17处理可能为空的返回值  《虎扑》关闭社区内容推荐方法  Go App Engine 项目结构与包管理深度指南  铁路12306怎么申请退票_铁路12306退票申请操作流程  如何查询个人病历记录  键盘声音异常怎么回事_键盘异响怎么处理  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  《下一站江湖2》风神腿获取攻略  msn官方入口2025登录 msn官网2025直达首页入口  中通快递官网指定查询 中通快递单号查询平台入口  构建可配置的J*aScript加权点击计数器与共享总计功能  Python项目中的条件导入:解决跨模块依赖问题  PHP动态导航按钮:根据用户登录状态切换链接与文本  小米civi如何设置锁屏时间  mysql如何管理数据库账户_mysql数据库账户管理技巧  如何在CSS中使用absolute实现登录弹窗居中_transform translate结合  Python中对象引用与链表属性赋值的机制解析  如何使用 Optional 类型并满足 Pylint 的类型检查  WPS文字如何进行简繁转换 

 2025-11-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.