ruby-on-rails - Ruby - 批量读取文件

标签 ruby-on-rails ruby scripting

我正在读取一个大小为 10mb 且包含一些 ID 的文件。我将它们读入 ruby 列表。我担心将来可能会导致内存问题,因为文件中的 id 数量可能会增加。有没有一种批量读取大文件的有效方法?

谢谢

最佳答案

Lazy Enumeratorseach_slice ,您可以两全其美。中间切线不用担心,可以批量迭代多行。 batch_size 可以自由选择。

header_lines = 1
batch_size   = 2000

File.open("big_file") do |file|
  file.lazy.drop(header_lines).each_slice(batch_size) do |lines|
    # do something with batch of lines
  end
end

它可用于将巨大的 CSV 文件导入数据库:

require 'csv'
batch_size   = 2000

File.open("big_data.csv") do |file|
  headers = file.first
  file.lazy.each_slice(batch_size) do |lines|
    csv_rows = CSV.parse(lines.join, headers: headers)
    # do something with 2000 csv rows, e.g. bulk insert them into a database
  end
end

关于ruby-on-rails - Ruby - 批量读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2962134/

相关文章:

ruby-on-rails - 首次登录时显示不同的 Devise Flash 消息

ruby-on-rails - RAILS link_to外部站点,url是用户表的属性,比如: @users.网站

scripting - 为什么 pbs(dsh) 将我的任务安排到一个节点上?

ruby-on-rails - Ruby on rails 4 App 中的随机图像

ruby-on-rails - rspec 测试结果 Capybara::ElementNotFound

ruby - 是否可以在 RPG Maker XP 中更新 Ruby 版本

ruby - 在 ruby​​ 中使用散列密码

node.js - 在 npm 脚本中使用子依赖项

linux - 用于批量重命名文件夹中文件的 Shell/Bash 快捷方式

ruby-on-rails - Rails 3 HTTP 摘要身份验证