2016-08-19 111 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是嚴格的內存數據結構。