CSV 数据文件的便捷处理方式 csvutil

BSD
Google Go 查看源码»
跨平台
2016-09-16
达尔文

 一组CSV 数据文件的便捷处理方式。

举例:

将CSV数据读取进结构体

package main
import (
    "io"
    "log"
    "github.com/go-hep/csvutil"
)
func main() {
    fname := "testdata/simple.csv"
    tbl, err := csvutil.Open(fname)
    if err != nil {
        log.Fatalf("could not open %s: %v\n", fname, err)
    }
    defer tbl.Close()
    tbl.Reader.Comma = ';'
    tbl.Reader.Comment = '#'
    rows, err := tbl.ReadRows(0, 10)
    if err != nil {
        log.Fatalf("could read rows [0, 10): %v\n", err)
    }
    defer rows.Close()
    irow := 0
    for rows.Next() {
        data := struct {
            I int
            F float64
            S string
        }{}
        err = rows.Scan(&data)
        if err != nil {
            log.Fatalf("error reading row %d: %v\n", irow, err)
        }
    }
    err = rows.Err()
    if err != nil {
        log.Fatalf("error: %v\n", err)
    }
}

将CSV数据读取进值的一部分

package main
import (
    "io"
    "log"
    "github.com/go-hep/csvutil"
)
func main() {
    fname := "testdata/simple.csv"
    tbl, err := csvutil.Open(fname)
    if err != nil {
        log.Fatalf("could not open %s: %v\n", fname, err)
    }
    defer tbl.Close()
    tbl.Reader.Comma = ';'
    tbl.Reader.Comment = '#'
    rows, err := tbl.ReadRows(0, 10)
    if err != nil {
        log.Fatalf("could read rows [0, 10): %v\n", err)
    }
    defer rows.Close()
    irow := 0
    for rows.Next() {
        var (
            I int
            F float64
            S string
        )
        err = rows.Scan(&I, &F, &S)
        if err != nil {
            log.Fatalf("error reading row %d: %v\n", irow, err)
        }
    }
    err = rows.Err()
    if err != nil {
        log.Fatalf("error: %v\n", err)
    }
}

从结构体读取CSV数据

package main
import (
    "log"
    "github.com/go-hep/csvutil"
)
func main() {
    fname := "testdata/out.csv"
    tbl, err := csvutil.Create(fname)
    if err != nil {
        log.Fatalf("could not create %s: %v\n", fname, err)
    }
    defer tbl.Close()
    tbl.Writer.Comma = ';'
    err = tbl.WriteHeader("## a simple set of data: int64;float64;string\n")
    if err != nil {
        log.Fatalf("error writing header: %v\n", err)
    }
    for i := 0; i < 10; i++ {
        data := struct {
            I int
            F float64
            S string
        }{
            I: i,
            F: float64(i),
            S: fmt.Sprintf("str-%d", i),
        }
        err = tbl.WriteRow(data)
        if err != nil {
            log.Fatalf("error writing row %d: %v\n", i, err)
        }
    }
    err = tbl.Close()
    if err != nil {
        log.Fatalf("error closing table: %v\n", err)
    }
}

从值里面读取

package main
import (
    "log"
    "github.com/go-hep/csvutil"
)
func main() {
    fname := "testdata/out.csv"
    tbl, err := csvutil.Create(fname)
    if err != nil {
        log.Fatalf("could not create %s: %v\n", fname, err)
    }
    defer tbl.Close()
    tbl.Writer.Comma = ';'
    err = tbl.WriteHeader("## a simple set of data: int64;float64;string\n")
    if err != nil {
        log.Fatalf("error writing header: %v\n", err)
    }
    for i := 0; i < 10; i++ {
        var (
            f = float64(i)
            s = fmt.Sprintf("str-%d", i)
        )
        err = tbl.WriteRow(i, f, s)
        if err != nil {
            log.Fatalf("error writing row %d: %v\n", i, err)
        }
    }
    err = tbl.Close()
    if err != nil {
        log.Fatalf("error closing table: %v\n", err)
    }
}
的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

Go 语言项目

Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.org gowalker gosearch Sourcegraph Contributing To edit this page you must be a c...

2014/01/03 21:49
758
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部