rubyj处理大量文件

时间:2009-12-28 04:39:26

标签: ruby

我相信File.foreach('input.txt')会一次读取一行文件。虽然无法对任何文档进行罚款。任何人都可以确认吗?

此外,我想创建一个巨大的文件来测试File.forach和File.open之间的差异。如果文件非常大,那么File.open应该失败并且File.foreach应该成功。任何人都知道任何漂亮的* nix技巧来快速创建一个巨大的文件吗?

更新

在进一步阅读时,我发现了以下不同的方式来阅读文件。不确定哪一个会尝试同时阅读所有这些内容。将尝试一些案例,并将更新这篇文章。

f = File.open('input.txt')
a = f.readlines

f = File.open('input.txt')
a = f.get

f = File.open('input.txt')
f.each_line{ |s| puts s}

2 个答案:

答案 0 :(得分:1)

File.foreach(“file”)将为文件中的行创建一个枚举器,所以是的,它会执行您认为它的操作。为了快速创建一个大文件(这会创建一个1 GB的文件,如果你需要更大的东西,可以更改count参数):

dd if=/dev/random of=myfile.dat bs=$(( 1024 * 1024  )) count=1000

答案 1 :(得分:0)

open在一个非常大的文件上失败没有特别的原因。也就是说,open只打开一个文件(用于阅读,写作或追加)。它不会立即将文件粘贴到内存中。

就I / O的Ruby文档而言,我将从这里开始:

http://ruby-doc.org/core/classes/IO.html