如何在Ruby中从给定的第n行开始读取文件(CSV)

4

我有一个很大的CSV文件,想要从第n行开始读取。目前我有以下代码:

CSV.foreach(path) do |row|
  #process
end

我需要从文件n开始阅读。


在“n”之前的行是CSV数据还是一堆文本? - mu is too short
它们是CSV记录。 - yatish mehta
这些行(或列)的长度总是相同的吗?还是可能不同?请记住,使用UTF-8编码时,即使字符数相似,字节数也可能不同。 - knut
1个回答

3
您可以使用.readlines方法读取特定行:.readlines
require 'csv'

p CSV.readlines(path)[15..20] # array returned

# Benchmark 
#     user     system      total        real
# 0.020000   0.000000   0.020000 (  0.015769)

另一种方式(我相信不应该在内存中加载整个文件):

from = 15
to = 20
csv = CSV.open(file, 'r')

# skipping rows before one we need
from.times { csv.readline }

# reading rows we need
(to - from).times { p csv.readline }

# Benchmark 
#     user     system      total        real
# 0.000000   0.000000   0.000000 (  0.000737)

1
这是一个大于10GB的大文件,使用readlines会不会占用整个内存? - yatish mehta
@yatishmehta 你知道具体想读哪几行吗?我的意思是从 ij - Rustam Gasanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接