【发布时间】:2011-05-11 04:52:46
【问题描述】:
我有一个大约 150mb 的简单文本文件。我的代码将读取每一行,如果它匹配某些正则表达式,它将被写入输出文件。 但是现在,像
一样遍历文件的所有行(几分钟)只需要很长时间File.open(filename).each do |line|
# do some stuff
end
我知道循环文件的行需要一段时间,因为即使我对“#do some stuff”中的数据什么都不做,它仍然需要很长时间。
我知道一些 unix 程序几乎可以立即解析像这样的大文件(如 grep),所以我想知道为什么 ruby (MRI 1.9) 需要这么长时间来读取文件,有什么方法可以让它更快?
【问题讨论】:
-
你考虑过使用
sed吗? -
@Austin 我想用纯红宝石做这个
-
我无法重现这个。在这里迭代一个 150mb 的文件需要不到一秒钟的时间。当然比 grep 慢,但不是你所描述的程度。该文件是否可能有很长的行?在这种情况下,按块而不是行读取可能会有所帮助(如果您尝试做的事情完全可能的话)。
-
@sepp2k 每行约 300 个字符,您的测试文件中的行有多长?
-
@Henry:在我的测试中,每行长度为 149 个字符,后跟一个换行符(所以我在一百万行中每行有 150 个字符)。
标签: ruby