Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ibbd-dev/go-csv
golang map csv reader and writer like csv.DictReader and csv.DictWriter in Python. 实现类似Python的csv.DictReader和csv.DictWriter
https://github.com/ibbd-dev/go-csv
csv golang
Last synced: 6 days ago
JSON representation
golang map csv reader and writer like csv.DictReader and csv.DictWriter in Python. 实现类似Python的csv.DictReader和csv.DictWriter
- Host: GitHub
- URL: https://github.com/ibbd-dev/go-csv
- Owner: ibbd-dev
- License: apache-2.0
- Created: 2018-04-17T10:02:47.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-07-10T07:24:52.000Z (over 6 years ago)
- Last Synced: 2023-07-27T22:12:57.645Z (over 1 year ago)
- Topics: csv, golang
- Language: Go
- Homepage:
- Size: 12.7 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# go-csv
实现类似Python的csv.DictReader和csv.DictWriter## Example
```go
package mainimport (
"fmt"
"io"
"os""github.com/ibbd-dev/go-csv"
)func main() {
fname := "./test.csv"
f, err := os.Open(fname)
if err != nil {
panic(err)
}
defer f.Close()
reader := goCsv.NewMapReader(f)
fieldnames, err := reader.GetFieldnames()
if err != nil {
panic(err)
}outFilename := "./out.csv"
wf, err := os.Create(outFilename)
if err != nil {
panic(err)
}
defer wf.Close()
writer := goCsv.NewMapWriter(wf, fieldnames)
writer.WriteHeader()for {
row, err := reader.Read()
if err == io.EOF {
fmt.Printf("the file is over")
break
}
if err != nil {
panic(err)
}
fmt.Printf("Row 1: %+v\n", row)if err = writer.WriteRow(row); err != nil {
panic(err)
}
}writer.Flush() // 注意最后需要刷到磁盘
}
```## MapReader API
```go
func NewMapReader(r io.Reader) *MapReader// Init 配置csv的基本参数
func (r *MapReader) Init(params csv.Reader)// SetSkip 设置跳过前面的若干条记录
func (r *MapReader) SetSkip(skip int)// SetLimit 设置只提取若干条记录
func (r *MapReader) SetLimit(limit int)// SetFieldnames 指定csv文件的字段名
// 如果不指定的话,则默认使用csv文件的第一行作为字段名
func (r *MapReader) SetFieldnames(fieldnames []string)func (r *MapReader) GetFieldnames() (fieldnames []string, err error)
// Read 读取一行记录
func (r *MapReader) Read() (record map[string]string, err error)// ReadAll 读取全部的内容
func (r *MapReader) ReadAll() (records []map[string]string, err error)
```## MapWriter API
```go
func NewMapWriter(w io.Writer, fieldnames []string) *MapWriter// NewMapWriterSimple 简化的writer对象,可以通过SetHeader方法来设置Header
func NewMapWriterSimple(w io.Writer) *MapWriterfunc (w *MapWriter) SetHeader(fieldnames []string)
// SetFieldNotSetErr 字段未设置时,是否报错
// 默认为false,即当字段为设置时,会自动使用空字符串补充
func (w *MapWriter) SetFieldNotSetErr(fieldNotSetErr bool)// Init 配置csv的基本参数
func (w *MapWriter) Init(params csv.Writer)func (w *MapWriter) WriteHeader() (err error)
func (w *MapWriter) WriteRow(row map[string]string) (err error)
func (w *MapWriter) WriteRows(rows []map[string]string) (err error)
// Flush 将数据刷到磁盘
func (w *MapWriter) Flush()
```## Reader API
```go
func NewReader(r io.Reader) *Reader// Init 配置csv的基本参数
func (r *Reader) Init(params csv.Reader)// SetSkip 设置跳过前面的若干条记录
func (r *Reader) SetSkip(skip int)// SetLimit 设置只提取若干条记录
func (r *Reader) SetLimit(limit int)func (r *Reader) GetFieldnames() (fieldnames []string, err error)
// Read 读取一行记录
func (r *Reader) Read() (record []string, err error)// ReadAll 读取全部的内容
func (r *Reader) ReadAll() (records [][]string, err error)
```## utils
```go
// CountLines 统计csv文件的记录数
func CountLines(r io.Reader) (n int, err error)```