如何解析位于Amazon S3存储桶中的CSV文件

下面是我用来从应用程序中解析CVS的代码,但我想解析位于Amazon S3存储桶中的文件。 它也需要在推送到Heroku时工作​​。

namespace :csvimport do desc "Import CSV Data to Inventory." task :wiwt => :environment do require 'csv' csv_file_path = Rails.root.join('public', 'wiwt.csv.txt') CSV.foreach(csv_file_path) do |row| p = Wiwt.create!({ :user_id => row[0], :date_worn => row[1], :inventory_id => row[2], }) end end end 

你可以这样做

 CSV.new(open(path_to_s3)).each do |row| ... end 

有S3的情况,当S3对象的权限不允许公共访问时。 内置的Ruby函数确实假设路径可公开访问,并且不考虑AWS S3特异性。

 s3 = Aws::S3::Resource.new bucket = s3.bucket("bucket_name_here") str = bucket.object("file_path_here").get.body.string content = CSV.parse(str, col_sep: "\t", headers: true).map(&:to_h) 

使用AWS开发工具包的每行说明:第1行。初始化第2行。选择存储桶。 第3行。选择一个对象并将其作为String。 第4行。有效地CSV.parse(’字符串’),但我还添加了一个选项并映射它以防万一它可以帮助你。

您可以从S3获取csv文件,如下所示:

 require 'csv' require 'net/http' CSV.parse(Net::HTTP.get(s3_file_url), headers: true).each do |row| # code for processing row here end