在压缩文件上调用File.readlines(或等效文件)而不首先解压缩它们

时间:2011-10-11 12:05:42

标签: ruby gzip

我正在尝试编写一个rake任务来扫描一些压缩的日志文件并提取一些数据然后我可以使用它来更新一些数据库记录。由于我们服务器的空间限制,我无法解压缩所有文件,只是调用它们上的File.readlines,这是我通常会做的。

有人可以建议一种不涉及解压缩文件的替代方法吗?我需要做的是基本扫描匹配特定正则表达式的行,然后从匹配行后的行中提取一些文本。它们都是gzip压缩文件,因此是.gz文件。

1 个答案:

答案 0 :(得分:1)

您可以使用Ruby打开gzip压缩文件,并像正常打开文件一样执行搜索,如下所示:

require 'zlib'

Zlib::GzipReader.open("myfile.gz") { |gz|
  # place your code here, something like:
  p gz.readlines.grep /my-magic-marker/
}

这会将整个文件加载到内存中,请注意这一点。

相关问题