我尝试了很多库,但似乎无法获得匹配的类型。
典型尝试:
using SomeLib, CSV
fh = SomeLib.open("gzipped_file.gz")
CSV.read(fh) # error
例:
using CodecZlib
CSV.read(GzipDecompressorStream(open("gzipped_file.gz")))
# ERROR: MethodError: no method matching position(::TranscodingStreams.TranscodingStream{GzipDecompressor,IOStream})
同时,您可以使用CSVFiles.jl:
using CSVFiles, DataFrames, FileIO
open("yourfile.csv.gz") do io
load(Stream(format"CSV", GzipDecompressorStream(io))) |> DataFrame
end
除了Bogumił的答案之外,您还可以执行以下操作:
using CSV
using GZip
df = GZip.open("some_file.csv.gz", "r") do io
CSV.read(io)
end
更简单:
using CSVFiles, DataFrames
df = DataFrame(load(File(format"CSV", "data.csv.gz")))
我的新包 TableReader.jl 支持透明 gzip、xz 和 zstd 解压缩。因此,以下代码将按预期工作:
using TableReader
readcsv("path/to/file.csv.gz")
readcsv("path/to/file.csv.xz")
readcsv("path/to/file.csv.zst")