比方說,我想幾個巨大的文件合併成一個,然後uniq!
一(單獨可能需要熱的第二)如何逐行讀取大型文本文件並將此流添加到Ruby中的逐行文件中?
這是我的理解是File.readlines()
負載的所有行到內存中。有沒有辦法一行一行地讀取它,有點像node.js pipe()
系統如何工作?
比方說,我想幾個巨大的文件合併成一個,然後uniq!
一(單獨可能需要熱的第二)如何逐行讀取大型文本文件並將此流添加到Ruby中的逐行文件中?
這是我的理解是File.readlines()
負載的所有行到內存中。有沒有辦法一行一行地讀取它,有點像node.js pipe()
系統如何工作?
一個關於Ruby的偉大的事情是,你可以在一個塊做文件IO:
File.open("test.txt", "r").each_line do |row|
puts row
end # file closed here
這樣的事情得到自動清理。也許這對小腳本無所謂,但總是很高興知道你可以免費獲得它。
您不是一次操作整個文件內容,並且如果使用readline,則不需要存儲每行的全部內容。
file = File.open("sample.txt", 'r')
while !file.eof?
line = file.readline
puts line
end
如果是這種情況,爲什麼加載一個帶有「readlines」的350Mb文件需要5秒?我只是假設它是「預加載」數組 –
是的,所以我有同樣的問題,但readline節省了我很多時間。如果這有效,請接受答案。 –
最好通過流式傳輸方法(如each_line
)讀取大文件,如其他答案或foreach
所示,後者打開文件並逐行讀取。因此,如果進程沒有請求將整個文件存儲在內存中,則應使用流式傳輸方法。在使用流媒體時,即使文件大小與readlines
等非流式傳輸方法相反,所需內存也不會增加。
File.foreach("name.txt") { |line| puts line }
你一定要一行一行嗎(而不是一次說1Mb)? –