Skip to content

CSV(Comma-Separated Values) ​

CSV(Comma-Separated Values,逗号分隔值)是一种简单的文本文件格式,用于存储表格数据。CSV 文件以纯文本形式表示数据,每行代表一条记录,每条记录的字段由逗号分隔。由于其简单和易于读取的特性,CSV 广泛用于数据交换、存储和分析。

1. CSV 文件格式 ​

CSV 文件的基本格式如下:

  1. 一行一条记录,字段用逗号(,)分隔:

    name,age,city
    John,30,New York
    Jane,25,Los Angeles
  2. 第一行通常是字段名称(标题行),不强制。例如:

    name,age,city
    John,30,New York
    Jane,25,Los Angeles
  3. 字段内容包含逗号、换行符或引号时,整个字段用双引号括起来。例如:

    name,age,city
    "John, Doe",30,"New York"
  4. 字段本身含引号时,再加一个引号转义。例如:

    name,age,city
    "John ""Johnny"" Doe",30,"New York"
  5. 每行以换行符(\n)结尾,不同操作系统可能用 \r\n 或 \n。

2. CSV 文件的优点和缺点 ​

优点:

  • 格式简单,大多数编程语言和工具都有现成支持。
  • Excel、Google Sheets 等电子表格软件能直接打开,纯文本也便于传输和编辑。

缺点:

  • 没有统一标准,不同实现对引号、换行的处理不一致,容易出兼容性问题。
  • 内容全部是字符串,类型信息要靠上层自己约定,嵌套结构也放不进去。
  • 字段里含逗号、引号、换行时,解析要额外做引号处理。

3. CSV 的应用 ​

  1. 数据交换:系统之间导数据,或给数据库、电子表格做导入导出。
  2. 日志:结构化数据写成文本日志,事后用文本工具就能处理。
  3. 数据分析:常作为分析工具的数据源。

4. CSV 处理示例(Go 语言) ​

在 Go 语言中,可以使用 encoding/csv 包来读取和写入 CSV 文件。以下是处理 CSV 文件的示例代码:

CSV 文件读取示例:

go
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("读取文件失败:", err)
        return
    }

    // 打印记录
    for _, record := range records {
        fmt.Println(record)
    }
}

CSV 文件写入示例:

go
package main

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

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

    // 创建 CSV 写入器
    writer := csv.NewWriter(file)
    
    // 写入记录
    records := [][]string{
        {"name", "age", "city"},
        {"John", "30", "New York"},
        {"Jane", "25", "Los Angeles"},
    }
    
    err = writer.WriteAll(records)
    if err != nil {
        fmt.Println("写入文件失败:", err)
        return
    }

    fmt.Println("CSV 文件写入成功")
}

5. CSV 文件处理中的常见问题 ​

  1. 字段内容中的特殊字符:

    • 处理字段内容中的逗号、引号和换行符时,需要正确地用引号括起来并转义。
  2. 数据类型的转换:

    • CSV 文件中所有数据都以字符串格式存储,在处理数据时可能需要转换为适当的数据类型(如整数、浮点数)。
  3. 处理大型 CSV 文件:

    • 对于非常大的 CSV 文件,建议使用流式读取的方法来避免一次性加载整个文件到内存中。

总结 ​

Go 处理 CSV 用 encoding/csv 包:读取走 Reader 的 ReadAll,写入走 Writer 的 WriteAll;文件大时改用流式读取,避免整个文件进内存。

参考资料 ​

同层页面 ​

相关页面 ​

Hello Golang