让我们说我想将几个大型文件合并为一个,然后uniq!
合并一个(仅此一个可能需要一秒钟)
我的理解是File.readlines()
将所有行加载到内存中。有没有办法逐行阅读它,有点像node.js pipe()
系统如何工作?
答案 0 :(得分:3)
您不能同时对整个文件内容进行操作,如果您使用readline,则不需要存储每行的全部内容。
file = File.open("sample.txt", 'r')
while !file.eof?
line = file.readline
puts line
end
答案 1 :(得分:2)
Ruby的一大优点是你可以在一个块中执行文件IO:
File.open("test.txt", "r").each_line do |row|
puts row
end # file closed here
所以事情会自动清理。也许这对于一个小小的剧本无关紧要,但知道你可以免费获得它总是很好。
答案 2 :(得分:1)
答案 3 :(得分:0)
大文件最好通过each_line
等流媒体方法读取,如另一个答案中所示,或foreach
打开文件并逐行读取。因此,如果进程没有请求将整个文件放在内存中,则应使用流方法。使用流式传输时,即使文件大小与readlines
等非流式传输方法相反,所需内存也不会增加。
File.foreach("name.txt") { |line| puts line }