如何逐行读取gzip文件?

inf*_*oop 10 ruby file-io gzip

我有一个gzip文件,目前我这样读了:

infile = open("file.log.gz")
gz = Zlib::GzipReader.new(infile)
output = gz.read
puts result
Run Code Online (Sandbox Code Playgroud)

我认为这会将文件转换为字符串,但我想逐行阅读.

我想要完成的是该文件有一些垃圾的警告消息,我想grep这些警告消息,然后将它们写入另一个文件.但是,一些警告信息会重复出现,所以我必须确保我只对它们进行一次grep.因此逐行阅读会对我有所帮助.

Tig*_*ine 20

您应该能够像使用常规流一样简单地遍历gzip阅读器(根据文档)

infile = open("file.log.gz")
gz = Zlib::GzipReader.new(infile)
gz.each_line do |line|
  puts line
end
Run Code Online (Sandbox Code Playgroud)

  • 是和否 - 如果GzipReader直接对文件进行操作,您可能需要关闭它.但在这种情况下,我假设`open`方法打开文件,因此你必须关闭`inline` IO流. (3认同)
  • 哇 !!4年后,仍然回复你的回答评论.现在就是奉献!! 再次感谢. (2认同)