首页 > 后端开发 > Golang > 正文

如何使用Golang的encoding/csv包来读取和写入CSV文件

P粉602998670
发布: 2025-09-07 08:42:01
原创
349人浏览过
Go语言的encoding/csv包提供内置CSV读写功能,无需外部依赖。使用csv.NewReader可从文件、字符串等io.Reader读取数据,ReadAll()一次性读取所有行,或用Read()逐行处理以节省内存。写入时通过csv.NewWriter将数据写入io.Writer,需调用Flush()确保数据落盘,或使用WriteAll()批量写入。该包自动处理含逗号、换行、引号的字段,支持自定义分隔符如分号或制表符,适用于大多数结构化数据处理场景。

如何使用golang的encoding/csv包来读取和写入csv文件

Go语言的

encoding/csv
登录后复制
包提供了读取和写入CSV文件的简单而高效的方式。它内置于标准库中,无需额外安装依赖,适合处理结构化数据,比如从Excel导出的表格或数据库导出的文本数据。

读取CSV文件

使用

csv.NewReader
登录后复制
可以从任意
io.Reader
登录后复制
(如文件、字符串、网络流)读取CSV数据。通常配合
os.Open
登录后复制
打开本地文件。

以下是一个读取CSV文件的完整示例:

package main

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

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

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

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

说明:

立即学习go语言免费学习笔记(深入)”;

抖云猫AI论文助手
抖云猫AI论文助手

一款AI论文写作工具,最快 2 分钟,生成 3.5 万字论文。论文可插入表格、代码、公式、图表,依托自研学术抖云猫大模型,生成论文具备严谨的学术专业性。

抖云猫AI论文助手 146
查看详情 抖云猫AI论文助手
  • csv.NewReader(file)
    登录后复制
    创建一个CSV读取器。
  • ReadAll()
    登录后复制
    一次性读取所有行,返回
    [][]string
    登录后复制
    ,每一行是一个字符串切片。
  • 若需逐行读取以节省内存,可使用
    reader.Read()
    登录后复制
    循环处理。

写入CSV文件

使用

csv.NewWriter
登录后复制
可以将数据写入任何
io.Writer
登录后复制
,比如文件或网络响应。

示例如下:

package main

import (
    "encoding/csv"
    "os"
)

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

    writer := csv.NewWriter(file)
    defer writer.Flush() // 必须调用Flush,否则数据可能未写入

    records := [][]string{
        {"姓名", "年龄", "城市"},
        {"张三", "25", "北京"},
        {"李四", "30", "上海"},
    }

    for _, record := range records {
        if err := writer.Write(record); err != nil {
            fmt.Println("写入行失败:", err)
            return
        }
    }
}
登录后复制

说明:

立即学习go语言免费学习笔记(深入)”;

  • csv.NewWriter(file)
    登录后复制
    创建写入器。
  • 必须调用
    writer.Flush()
    登录后复制
    ,确保缓冲区数据写入底层IO。
  • 也可以使用
    writer.WriteAll(records)
    登录后复制
    一次性写入多行。

处理带引号或特殊字符的数据

CSV包会自动处理包含逗号、换行或引号的字段。你只需正常传入字符串,写入器会自动加引号并转义。

例如:

writer.Write([]string{"Alice", "Engineer", "喜欢\"编程\"和,写代码"})
登录后复制

生成的CSV会正确转义为:

Alice,Engineer,"喜欢""编程""和,写代码"

读取时也会自动还原这些转义内容,无需手动处理。

自定义分隔符

默认使用逗号分隔,但可通过设置

Comma
登录后复制
字段改为其他字符,比如制表符或分号。

例如读取以分号分隔的文件:

reader := csv.NewReader(file)
reader.Comma = ';'
登录后复制

写入时也可同样设置:

writer := csv.NewWriter(file)
writer.Comma = '\t' // 使用制表符
登录后复制

基本上就这些。encoding/csv包简单直接,适合大多数CSV处理场景,只要注意Flush和错误处理即可。

以上就是如何使用Golang的encoding/csv包来读取和写入CSV文件的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号