【问题标题】:How to start reading a file(CSV) from a given line n in Ruby如何从Ruby中的给定行n开始读取文件(CSV)
【发布时间】:2014-11-15 20:24:41
【问题描述】:

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

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

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

【问题讨论】:

  • n 之前的行是 CSV 数据还是只是一堆文本?
  • CSV 它们是 CSV 记录
  • 行(或列)的长度始终相同还是可能不同?请记住,使用 UTF-8 时,字节可能会有所不同,即使字符数相似。

标签: ruby csv


【解决方案1】:

您可以使用.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)

【讨论】:

  • 它是大文件 >10gb 不会 readlines 占用整个内存吗?
  • @yatishmehta 你知道你想读的特定行吗?我的意思是从ij
猜你喜欢
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
相关资源
最近更新 更多