1

我发现了许多通过传入 [][] 字符串来写入 CSV 的代码示例。(如下所示):

package main

import (
    "os"
    "log"
    "encoding/csv"
)

var data = [][]string{
    {"Row 1", "30"}, 
    {"Row 2", "60"},
    {"Row 3", "90"}}

func main() {
    file, err := os.Create("tutorials_technology.csv")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    w := csv.NewWriter(file) 

    for _, value := range data {
        if err := w.Write(value); err != nil {
            log.Fatalln("Error writing record to csv: ", err)
        }
    }
    w.Flush()
}

但是,我还没有找到任何代码示例来说明如何使用gota dataframe.WriteCSV() 函数写入 CSV。在 gota数据框文档中,没有写入 csv 的示例,但有一个从 csv 读取的示例。

数据帧函数 WriteCSV() 需要 io.Writer{} 接口的输入。我不知道如何满足这一点。

以下没有工作

writer := csv.NewWriter(f)

df.WriteCSV(writer) // TODO This writer needs to be a []byte writer

我已经为此工作了很长一段时间。有没有人有任何线索?

我已经考虑将我的 gota 数据框转换为 [][] 字符串类型,但这有点不方便,因为我使用包的 LoadStructs() 函数将我的数据放入了 gota 数据框,并且我在半自定义中读取了一些 CSV在将它们放入结构之前的方式。

所以我可以编写一个函数来将我的结构转换为 [][]string 格式,但我觉得这很乏味,我相信一定有更好的方法。事实上,我敢肯定是因为数据帧类型有 WriteCSV() 方法,但我只是还没弄清楚如何使用它。

这是我的结构

type CsvLine struct {
    Index  int
    Date   string
    Symbol string
    Open   float64
    High   float64
    Low    float64
    Close  float64
    // Volume float64
    // Market_Cap float64
}

type File struct {
    Rows []CsvLine
}

免责声明:我是一个 golang 新手。我只使用 Go 几个月,这是我第一次尝试写入文件。我与 io.Writer 接口的交互不多,但我听说它非常有用。

是的,我经常看 Golang.org 的博客,我读过“Effective Go”,我一直在引用它。

4

1 回答 1

4

所以事实证明我误解了 io.Writer 接口,我不明白 os.Create() 函数返回什么。

事实证明,代码比我想象的还要简单和容易。

这是工作代码示例:

df := dataframe.LoadStructs(file.Rows)

f, err := os.Create(outFileName)
if err != nil {
    log.Fatal(err)
}

df.WriteCSV(f)
于 2018-10-24T20:50:56.333 回答