2016-08-19 74 views

回答

2

一个关于Ruby的伟大的事情是,你可以在一个块做文件IO:

File.open("test.txt", "r").each_line do |row| 
    puts row 
end    # file closed here 

这样的事情得到自动清理。也许这对小脚本无所谓,但总是很高兴知道你可以免费获得它。

2

您不是一次操作整个文件内容,并且如果使用readline,则不需要存储每行的全部内容。

file = File.open("sample.txt", 'r') 
while !file.eof? 
    line = file.readline 
    puts line 
end 
+0

如果是这种情况,为什么加载一个带有“readlines”的350Mb文件需要5秒?我只是假设它是“预加载”数组 –

+0

是的,所以我有同样的问题,但readline节省了我很多时间。如果这有效,请接受答案。 –

0

最好通过流式传输方法(如each_line)读取大文件,如其他答案或foreach所示,后者打开文件并逐行读取。因此,如果进程没有请求将整个文件存储在内存中,则应使用流式传输方法。在使用流媒体时,即使文件大小与readlines等非流式传输方法相反,所需内存也不会增加。

File.foreach("name.txt") { |line| puts line }

1

uniq!定义上Array,所以你无论如何都要读取文件到Array。您不能逐行处理文件,因为您不想处理文件,想要处理Array,而Array是严格的内存数据结构。