dongluo8439 2014-07-10 09:46
浏览 156
已采纳

如何读取压缩的CSV文件?

I'm facing some issues in reading archived CSV files.

So I want to use the csv package and the gzip package for this, but I don't know how to combine them.

The gzip.Reader(p []bytes) and the csv.Reader() have different signatures.

This is my reader function:

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('
')
        if err != nil {
            fmt.Println("done reading file")
            c <- "done"
            break
        }else{
            c <- fmt.Sprintf("%q",strings.Fields(line))
        }
    }
} 

Do you have any suggestions ?

  • 写回答

1条回答 默认 最新

  • dtkmejg127475 2014-07-10 10:18
    关注

    Just Open the file for reading, then use that file handle with gzip and then use that file handle for the csv reader:

    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)
        }
    }
    

    and this is my (uncompressed) data.csv:

    "foo","bar","baz"
    

    The output of my program is:

    foo
    bar
    baz
    

    as expected.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站