如何对 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/