如何在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+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告