我正在处理巨大的数据文件(每个文件有数百万行).
在开始处理之前,我想计算一下文件中的行数,这样我就可以指出处理过程有多远.
由于文件的大小,将整个文件读入内存是不切实际的,只需计算有多少行.有人对如何做到这一点有好的建议吗?
我正在处理巨大的数据文件(每个文件有数百万行).
在开始处理之前,我想计算一下文件中的行数,这样我就可以指出处理过程有多远.
由于文件的大小,将整个文件读入内存是不切实际的,只需计算有多少行.有人对如何做到这一点有好的建议吗?
如果你在Unix环境中,你可以让wc -l
来做这项工作.
它不会将整个文件加载到内存中;由于它针对流式文件和计算字/行进行了优化,因此性能足够好,而不是自己在Ruby中流式处理文件.
SSCCE:
filename = 'a_file/somewhere.txt'
line_count = `wc -l "#{filename}"`.strip.split(' ')[0].to_i
p line_count
或者,如果希望在命令行上传递一组文件:
wc_output = `wc -l "#{ARGV.join('" "')}"`
line_count = wc_output.match(/^ *([0-9]+) +total$/).captures[0].to_i
p line_count