Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
如何使用Golang encoding/csv处理CSV文件_Golang CSV文件读写示例_创想鸟

如何使用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 mainimport (    "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 内容如下:

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

姓名,年龄,城市张三,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 mainimport (    "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 文件,内容为:

姓名,年龄,城市张三,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文件读写示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1428677.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何在Golang中使用replace_Golang replace本地替换与多模块开发技巧
上一篇 2025年12月17日 01:17:22
如何使用Golang对HTTP接口进行测试_Golang HTTP handler测试方法说明
下一篇 2025年12月17日 01:17:34

相关推荐

发表回复

登录后才能评论
关注微信