如何阅读gzip压缩文件?

 顆顆顆顆幸福_483 发布于 2023-01-04 11:15

我在阅读存档的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))
        }
    }
} 

你有什么建议吗 ?

1 个回答
  • 只需打开文件进行读取,然后将该文件句柄与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
    

    正如所料.

    2023-01-04 11:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有