如何在 Golang 中读取 CSV 文件?

go programmingserver side programmingprogramming

要在 Go 中读取 CSV 文件,我们首先需要使用 Go 标准库提供的 encoding/csv 包。 encoding/csv 包包含各种函数和方法,可用于从 CSV 文件读取数据。

在本文中,我们将使用该包提供的 NewReader() 函数,该函数接受一个参数,即我们要打开的文件,然后对该文件调用 ReadAll() 方法。

除了 encoding/csv 包之外,我们还将使用 os 包,其中包含 Open 函数,该函数将为我们打开 CSV 文件。

CSV 数据

假设我们有一个名为 sampleFile.csv 的 CSV 文件,其中包含以下数据。

Series reference Description
PPIQ.SQU900000 PPI output index - All industries
PPIQ.SQU900001 PPI output index - All industries excl OOD
PPIQ.SQUC76745 PPI published output commodity - Transport support services
PPIQ.SQUCC3100 PPI output index level 3 - Wood product manufacturing
PPIQ.SQUCC3110 PPI output index level 4 - Wood product manufacturing
PPIQ.SQUFF0000 PPI output index level 1 - Wholesale trade
PPIQ.SQUFF1000 PPI output index level 2 - Wholesale trade
PPIQ.SQUFF1100 PPI output index level 3 - Wholesale trade

现在,我们要确保能够用 Go 语言打开该文件,然后将 CSV 文件的所有内容读入一个结构体,并打印这些对。请参考以下代码,该代码可以实现上述功能。

示例

请参考以下代码。

package main
import (
   "encoding/csv"
   "fmt"
   "os"
)
type CsvDataLines struct {
   Column1 string
   Column2 string
}
func main() {
   csvData, err := ReadCsvFile("sampleFile.csv")
   if err != nil {
      panic(err)
   }
   for _, line := range csvData {
      data := CsvDataLines{
         Column1: line[0],
         Column2: line[1],
      }
      fmt.Println(data.Column1 + " " + data.Column2)
   }
}
func ReadCsvFile(filename string) ([][]string, error) {
   // 打开 CSV 文件
   fileContent, err := os.Open(filename)
   if err != nil {
      return [][]string{}, err
   }
   defer fileContent.Close()

   // 将文件读入变量
   lines, err := csv.NewReader(fileContent).ReadAll()
   if err != nil {
      return [][]string{}, err
   }
   return lines, nil
}

在上述代码的 main 函数中,我们调用了 ReadCsvFile 函数,并在其中传递了文件名,然后调用 os 包的 NewReader() 函数,最后调用 struct 并填充其中的字段。

现在,下一步是以任意名称保存文件,然后运行命令 go run main.go。(我将文件保存为 ma​​in.go)

输出

运行上述命令后,我们将在终端中看到以下输出。

Series reference Description
PPIQ.SQU900000 PPI output index - All industries
PPIQ.SQU900001 PPI output index - All industries excl OOD
PPIQ.SQUC76745 PPI published output commodity - Transport support services
PPIQ.SQUCC3100 PPI output index level 3 - Wood product manufacturing
PPIQ.SQUCC3110 PPI output index level 4 - Wood product manufacturing
PPIQ.SQUFF0000 PPI output index level 1 - Wholesale trade
PPIQ.SQUFF1000 PPI output index level 2 - Wholesale trade
PPIQ.SQUFF1100 PPI output index level 3 - Wholesale trade

相关文章