假设我想把几个大文件合并成一个,然后再对它进行uniq!
操作(仅此操作可能需要一点时间)
据我了解,File.readlines()
会将所有行加载到内存中。 是否有一种逐行读取的方法,就像node.js pipe()
系统一样?
假设我想把几个大文件合并成一个,然后再对它进行uniq!
操作(仅此操作可能需要一点时间)
据我了解,File.readlines()
会将所有行加载到内存中。 是否有一种逐行读取的方法,就像node.js pipe()
系统一样?
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
each_line
或者使用foreach
打开文件并逐行读取。因此,如果进程不要求在内存中拥有整个文件,则应该使用流式方法。在使用流式方法时,即使文件大小增加,所需的内存也不会增加,与非流式方法如readlines
相反。
File.foreach("name.txt") { |line| puts line }