在這段代碼中,我試圖讀取目錄中的書名,然后將它們寫入 CSV 檔案,但它只在 CSV 檔案中寫入第一個書名。我不知道如何使它進一步作業。
package main
import (
"encoding/csv"
"io/ioutil"
"log"
"os"
)
func main() {
files, err := ioutil.ReadDir("/home/bilal/Documents/Books/English")
if err != nil {
log.Fatal(err)
}
csvFile, err := os.Create("English.csv")
if err != nil {
log.Fatal(err)
}
for _, file := range files {
// fmt.Println(file.Name())
fileData := []string{
file.Name(),
}
csvWriter := csv.NewWriter(csvFile)
csvWriter.Write(fileData)
csvWriter.Flush()
csvFile.Close()
}
}
uj5u.com熱心網友回復:
問題是您正在關閉回圈內的檔案,因此在第一次迭代之后它已經關閉。此外,無需csvWriter在回圈內創建,您可以創建一個并在回圈后重繪 它。請注意,您可以在創建檔案句柄和撰寫器后立即使用defer 陳述句為它們設定清理代碼(這樣,您不必擔心在控制流可能從函式回傳的任何地方顯式包含清理代碼)。在離開函式之前, defer 陳述句會以相反的順序執行,所以在下面的例子中csvWriter.Flush()會在之前執行csvFile.Close(),正如預期的那樣:
// ...
csvFile, err := os.Create("English.csv")
if err != nil {
log.Fatal(err)
}
defer csvFile.Close()
csvWriter := csv.NewWriter(csvFile)
defer csvWriter.Flush()
for _, file := range files {
fileData := []string{ file.Name() }
csvWriter.Write(fileData)
}
// ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/491258.html
下一篇:如何根據分數對資料進行排序?
