如何在Go语言中读取CSV文件?


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

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

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

CSV数据

假设我们有一个名为**sampleFile.csv**的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文件的所有内容读取到一个**结构体**中,然后打印这些键值对。请考虑以下代码,它将允许我们这样做。(此处应插入Go代码示例)

示例

请考虑以下代码。

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) {
   // Open CSV file
   fileContent, err := os.Open(filename)
   if err != nil {
      return [][]string{}, err
   }
   defer fileContent.Close()

   // Read File into a Variable
   lines, err := csv.NewReader(fileContent).ReadAll()
   if err != nil {
      return [][]string{}, err
   }
   return lines, nil
}

在上面的代码中的主函数中,我们调用了**ReadCsvFile**函数,在该函数中,我们传递文件名,然后调用os包的**NewReader()**函数,最后,我们调用**结构体**并将字段填充到其中。

下一步是将文件保存为任意名称,然后运行命令**go run main.go**。(我将文件保存为**main.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

更新于:2022年2月21日

2K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告