解压缩 .gz 文件并逐块准备它

问题描述 投票:0回答:2

我有一些相当大的 .gz 文件想要阅读。但我不想一次读取每个文件,因为这可能会损坏 RAM,而是我想逐块读取它。我怎样才能做到这一点?在文档中,它描述了一种通过读取整个文件的传统方法:

Zlib::GzipReader.open('hoge.gz')  do |gz|
  print gz.read
end

File.open('hoge.gz') do |f|
  gz = Zlib::GzipReader.new(f)
  print gz.read
  gz.close
end
ruby compression
2个回答
4
投票

任何地方都没有这样的例子。我需要阅读文档。

require 'zlib'

def read_gz_by_chunk

infile = open("file_name.gz")
rgz = Zlib::GzipReader.new(infile)

   while(!rgz.eof)
     data = rgz.readpartial(256)
     # do stuff
     puts data
   end

end

0
投票

这就是我所做的。基本上,此方法用于从 URL 获取 json.gz,然后将其分块读取为字符串,然后将其解析为 JSON。您不必下载 json.gz 您只需引用您的文件即可。我认为有人可以用它来构建自己的方法。

require 'zlib'

def parse_large_json_gz_file()
  gz_file = # reference your file here

  json_string = ''

  file = Zlib::GzipReader.open(gz_file)
  until file.eof?
    json_string += file.readpartial(1024 * 1024)
  end

  JSON.parse(json_string)
end
© www.soinside.com 2019 - 2024. All rights reserved.