csv - Golang,写入csv文件结果文件有时为空

标签 csv parsing go

我正在处理可解析表,并决定以可读格式查看该表。当我用大语法创建 csv 时,它成功输出了结果。但是,解析表不正确。所以,我正在尝试使用更简单的语法进行测试。出于某种原因,这段代码会生成一个包含我的大型语法的 csv 文件,但对于简单语法,该文件是空白的。我在这里做错了什么?

func WriteTableToFile() {
    f, err := os.Create("tableFile3.csv")
    Check(err)
    defer f.Close()
    w := csv.NewWriter(f)
    var tsl []string
    tsl = append(tsl, " ")
    tsl, _ = UnionSlices(tsl, TerminalSymbolList)
    w.Write(tsl)
    fmt.Println(tsl)

    for ntk := range ParseTable {
        var writeSlice []string
        writeSlice = append(writeSlice, ntk)
        for _, tk := range TerminalSymbolList {
            for _, p := range ParseTable[ntk][tk] {
                writeSlice = append(writeSlice, p)
                fmt.Println("appending ", p)
            }
        }
        w.Write(writeSlice)
        fmt.Println("wrote ", writeSlice)
    }
}

最佳答案

您需要调用 Flush CSV 编写器的方法,以确保在关闭文件之前将所有缓冲数据写入文件。您可以使用以下修改:

f, err := os.Create("tableFile3.csv")
Check(err)
w := csv.NewWriter(f)
defer func() {
    w.Flush()
    f.Close()
}()

这个概念可以扩展到适用于所有使用缓冲区的编写器。

奇怪的是,Flush 方法不返回任何内容,这与 error returned by the Flush method of a *bufio.Writer 不同。但你可以使用 Error方法来检查在前面的 WriteFlush 调用期间可能发生的错误。

关于csv - Golang,写入csv文件结果文件有时为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43700580/

相关文章:

php - 使用php导入csv并更新mysql中的记录

python - Spark 流 : read CSV string from kafka, 写入 Parquet

python - 如何 checkout 多个提交并将代码版本复制到另一个目录?

python - 解析CSV文件中某些列中的逗号Python

parsing - Bison 减少/减少与强制转换和表达式括号的冲突

shell - 这个论点是如何扩大的?

http - 如何在golang中使用运行时错误?

bash - 在 bash 中解析输出

c++ - 使用标记解析字符串的函数

go - 无法解析跟踪 : no EvFrequency event