go - 编码为 CSV,然后在 golang 中 ZIP

标签 go stream

如何对 CSV 进行编码然后压缩?

有没有办法将一个作家链接到另一个作家?我必须在编写器之间创建一个新缓冲区吗?

var buf bytes.Buffer

zipWriter := zip.NewWriter(&buf)
csvwriter := csv.NewWriter(zipWriter) // <--- zip writer doesn't implement `io.writer`

csvwriter.Write([]string{"a", "b\"fwr", "c"})
csvwriter.Write([]string{"a", "e", "ww"})
csvwriter.Flush()

println(buf.String())

最佳答案

zip 生成具有目录结构的结构化 zip 文件,这意味着您需要独立创建和添加每个文件。

example playground演示了如何添加 CSV 文件。它还演示了打开压缩的 zip 文件并枚举文件。


如果你想gzip文件作为一个压缩流,比如:

$ gzip somefile.csv

生成somefile.csv.gz

然后您可以按照 playground 的说明执行以下操作

package main

import (
    "bytes"
    "compress/gzip"
    "encoding/csv"
    "fmt"
    "io/ioutil"
)

func main() {
    var buf bytes.Buffer

    zipWriter := gzip.NewWriter(&buf)
    csvwriter := csv.NewWriter(zipWriter)

    csvwriter.Write([]string{"a", "b\"fwr", "c"})
    csvwriter.Write([]string{"a", "e", "ww"})
    csvwriter.Flush()
    zipWriter.Flush()
    zipWriter.Close()

    fmt.Println(buf.Bytes())
    zipReader, _ := gzip.NewReader(bytes.NewReader(buf.Bytes()))
    d, err := ioutil.ReadAll(zipReader)
    if err != nil {
        fmt.Println("err", err)
    }
    fmt.Println(string(d))
}

关于go - 编码为 CSV,然后在 golang 中 ZIP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59417897/

相关文章:

html - zserge/lorca HTML 提交到 go func

c# - 如何从 txt 文件中正确读取瑞典语字符

node.js 如何实时流式传输 22GB gzipped 文件解压缩

go - 如何在函数中多次添加一些行?

windows - 带有双引号参数的 exec

go - 关闭未知长度的 channel

database - GoLang Multi-Tenancy 应用程序数据库连接

streaming - 红5直播

ios - 如何在 iOS 中使用 AVPlayer 缓冲音频?

Java URL 问题?