为了账号安全,请及时绑定邮箱和手机立即绑定

使用范围循环迭代时将条目写入 CSV 文件时出现问题

使用范围循环迭代时将条目写入 CSV 文件时出现问题

Go
守候你守候我 2022-12-19 21:21:43
在此代码中,我试图读取目录中的书名,然后将它们写入 CSV 文件,但它只将第一本书名写入 CSV 文件。我不知道如何让它进一步工作。package mainimport (    "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()    }}
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

问题是你在循环内关闭文件,所以在第一次迭代之后它已经关闭了。此外,无需csvWriter在循环内创建,您可以创建一个并在循环后刷新它。请注意,您可以在创建文件句柄和编写器后立即使用defer 语句设置清理代码(这样,您不必担心在控制流可能从函数返回的任何地方显式包含清理代码). 在离开函数之前,defer 语句将以相反的顺序执行,因此在下面的示例中csvWriter.Flush()将按预期执行 before 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)

}

// ...


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号