我在阅读存档的CSV文件时遇到了一些问题.
所以我想使用csv
包和gzip
包,但我不知道如何组合它们.
在gzip.Reader(p []bytes)
与csv.Reader()
具有不同的签名.
这是我的读者功能:
func reader(filename string, c chan string) { fi, err := os.Open(filename) var r *bufio.Reader if err != nil { fmt.Println("%q",err) os.Exit(1) } fz, err := g.NewReader(fi) if err != nil { r = bufio.NewReader(fi) }else { r = bufio.NewReader(fz) } for { line, err := r.ReadString('\n') if err != nil { fmt.Println("done reading file") c <- "done" break }else{ c <- fmt.Sprintf("%q",strings.Fields(line)) } } }
你有什么建议吗 ?
只需打开文件进行读取,然后将该文件句柄与gzip一起使用,然后将该文件句柄用于csv阅读器:
package main import ( "compress/gzip" "encoding/csv" "fmt" "log" "os" ) func main() { f, err := os.Open("data.csv.gz") if err != nil { log.Fatal(err) } defer f.Close() gr, err := gzip.NewReader(f) if err != nil { log.Fatal(err) } defer gr.Close() cr := csv.NewReader(gr) rec, err := cr.Read() if err != nil { log.Fatal(err) } for _, v := range rec { fmt.Println(v) } }
这是我的(未压缩)data.csv
:
"foo","bar","baz"
我的程序输出是:
foo bar baz
正如所料.