如何使用Golang encoding/csv处理CSV文件_Golang CSV文件读写示例


Go语言中encoding/csv包用于读写CSV文件,支持标准及自定义分隔符的解析与生成,能自动处理带引号字段。1. 使用csv.NewReader读取文件或字符串数据,可调用ReadAll()一次性读取或循环Read()逐行读取;2. 使用csv.NewWriter写入数据到文件或缓冲区,需调用Flush()确保数据写入;3. 支持自定义分隔符,如制表符或分号,通过设置Comma字段实现;4. 自动处理含逗号、换行等特殊字符的字段,无需手动解析引号内容。示例涵盖打开文件、创建读写器、遍历记录、错误处理及资源释放全过程,适用于报表导出、配置导入等场景。

如何使用golang encoding/csv处理csv文件_golang csv文件读写示例

在Go语言中,encoding/csv 包提供了对CSV(逗号分隔值)文件的读写支持。它属于标准库,无需额外安装,适合处理结构化数据,比如导出报表、导入配置或解析日志。下面通过具体示例说明如何使用它进行CSV文件的读取与写入。

读取CSV文件

使用 csv.NewReader 可以从任何实现了 io.Reader 接口的对象中读取数据,常见的是从文件或字符串中读取。

以下是从本地CSV文件读取所有记录的示例:

package main

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

func main() {
    // 打开CSV文件
    file, err := os.Open("data.csv")
    if err != nil {
        fmt.Println("打开文件失败:", err)
        return
    }
    defer file.Close()

    // 创建CSV读取器
    reader := csv.NewReader(file)

    // 读取所有行
    records, err := reader.ReadAll()
    if err != nil {
        fmt.Println("读取CSV失败:", err)
        return
    }

    // 遍历输出每一行
    for _, record := range records {
        fmt.Println(record)
    }
}

假设 data.csv 内容如下:

姓名,年龄,城市
张三,25,北京
李四,30,上海

运行程序将输出:

[姓名 年龄 城市]
[张三 25 北京]
[李四 30 上海]

如果想逐行读取以节省内存(适合大文件),可以使用 reader.Read()

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

写入CSV文件

使用 csv.NewWriter 可以将数据写入任何实现了 io.Writer 接口的对象,如文件或缓冲区。

以下示例将数据写入新的CSV文件:

package main

import (
    "encoding/csv"
    "os"
)

func main() {
    // 创建或清空文件
    file, err := os.Create("output.csv")
    if err != nil {
        fmt.Println("创建文件失败:", err)
        return
    }
    defer file.Close()

    // 创建CSV写入器
    writer := csv.NewWriter(file)
    defer writer.Flush() // 确保所有数据写入磁盘

    // 准备要写入的数据
    data := [][]string{
        {"姓名", "年龄", "城市"},
        {"张三", "25", "北京"},
        {"李四", "30", "上海"},
    }

    // 逐行写入
    for _, record := range data {
        err := writer.Write(record)
        if err != nil {
            fmt.Println("写入失败:", err)
            return
        }
    }
}

执行后会生成 output.csv 文件,内容为:

MCP市场 MCP市场

中文MCP工具聚合与分发平台

MCP市场 211 查看详情 MCP市场
姓名,年龄,城市
张三,25,北京
李四,30,上海

注意: 必须调用 writer.Flush(),否则数据可能不会真正写入文件。

处理带引号或特殊字符的字段

CSV规范允许字段包含逗号、换行符或引号,这时需要使用双引号包裹字段。encoding/csv 会自动处理这些情况。

例如,某个字段包含逗号:

data := [][]string{
    {"用户", "地址"},
    {"王五", "广东省,深圳市"},
}

写入后CSV内容为:

用户,地址
王五,"广东省,深圳市"

读取时也会正确解析带引号的字段,无需手动处理。

自定义分隔符

有些CSV文件使用制表符(TSV)或其他字符作为分隔符。可以通过设置 Comma 字段来自定义:

reader := csv.NewReader(file)
reader.Comma = '\t' // 使用制表符分隔

writer := csv.NewWriter(file)
writer.Comma = ';'  // 使用分号分隔

这在处理非标准格式时非常有用。

基本上就这些。encoding/csv 简单高效,配合 os 和 bufio 可轻松完成大多数CSV操作。不复杂但容易忽略细节,比如 Flush 和错误处理,写生产代码时要格外注意。

以上就是如何使用Golang encoding/csv处理CSV文件_Golang CSV文件读写示例的详细内容,更多请关注其它相关文章!


# 遍历  # 苦参种子网站建设文案  # 赤壁谷歌seo营销公司  # 台州网站建设营销推广  # 北京网站推广价格  # 新网站推广活动策划方案  # seo理论知识收录  # 平凉seo网络推广  # 芜湖市网站推广  # 天津好的网站建设风格  # 淄博网站建设与制作  # 深圳市  # 广东省  # 是从  # go  # 分隔符  # 如何使用  # 李四  # 自定义  # 北京  # 标准库  # csv文件  # 上海  # ai  # csv  # go语言  # golang 


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


相关推荐: 以下哪一项是古代兵书三十六计中的计谋  AO3永久镜像入口开放_AO3最新网址兼容所有浏览器  Win10怎么设置快速启动 Win10开启快速启动设置方法  iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】  《三角洲行动》战斗步枪与机枪类改装代码分享  Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  《360浏览器》设置摄像头权限方法  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  《健康大兴》注册方法介绍  动漫之家观看全集库 动漫之家免费资源网地址  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  Yandex世界探索 最新官方免登录入口全知道  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  J*aScript二进制处理_ArrayBuffer与Blob  cad加载的线型看不见怎么办_cad线型不可见问题解决方法  抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法  易车网官网直达入口 易车网在线登录入口  VB表达式书写规则解析  《幻兽帕鲁》手游帕鲁捕捉技巧分享  PHP安全加载非公开目录图片与动态内容类型处理指南  《虎扑》关闭社区内容推荐方法  Animex动漫社社登录官网 Animex动漫社资源社入口直达  鸣潮历史学家灯塔位置一览  Python模块化编程:避免循环导入与共享函数的最佳实践  C#解析来自网络的XML流数据 实时错误处理与重试机制  企查查官网和爱企查 企查查企业查询官网入口  Linux如何自动分析系统异常日志_Linux日志智能检测  《随手记》启用语音备注方法  《咸鱼之王》新版孙坚技能解析  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  使用TinyButStrong生成HTML并结合Dompdf创建PDF教程  广州地铁app准妈咪徽章领取方法  歌词怎么展示在|直播|间视频号?有什么注意事项?  铁路12306座位怎么选_12306官方选座操作方法  qq音乐官方网站入口_qq音乐在线听歌网页版链接  如何定制PrimeNG Sidebar的背景颜色  vivo手机视频通话美颜怎么设置_vivo视频通话美颜开启方法  Golang如何使用log记录日志信息_Golang log日志记录方法总结  个人所得税办理入口 个人所得税综合所得年度汇算入口  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享  php如何实现多域名共享session_php存储session到redis与跨域读取配置  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  性能与资源监视器快捷打开  《盗墓笔记手游》技能介绍  京东快递包裹信息查询入口 京东快递官方查询平台入口  NumPy 高性能技巧:基于多列条件查找最近邻行索引的向量化实现  Sublime怎么格式化HTML代码_Sublime前端代码美化插件使用指南  VS Code如何设置默认配置  Go反射进阶:访问内嵌结构体中的被遮蔽方法 

 2025-12-16

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

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

点击免费数据支持

提交您的需求,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.