Ruby on rails 打开包含要在rake任务中使用的csv文件的zip文件
我有一个类似这样的rake任务Ruby on rails 打开包含要在rake任务中使用的csv文件的zip文件,ruby-on-rails,ruby,csv,Ruby On Rails,Ruby,Csv,我有一个类似这样的rake任务 require 'open-uri' require 'csv' namespace :Table do task reload: :environment do ActiveRecord::Base.connection.execute("TRUNCATE Table RESTART IDENTITY") csv_text = open('URL') csv = CSV.parse(csv_text, :heade
require 'open-uri'
require 'csv'
namespace :Table do
task reload: :environment do
ActiveRecord::Base.connection.execute("TRUNCATE Table RESTART IDENTITY")
csv_text = open('URL')
csv = CSV.parse(csv_text, :headers=>true)
csv.each do |row|
Table.create(table columns)
end
end
end
现在我可以让文件以gzip或zip的形式返回。它必须被压缩,但是csv是zip文件中唯一的文件
有没有办法让它在zip文件中打开csv
谢谢你的帮助
Sam我会使用gem,将文件读入一个临时文件,解压缩它,提取你想要的文件,并将其作为CSV的本地文件正常打开
require 'open-uri'
require 'csv'
require 'zip'
namespace :Table do
task reload: :environment do
ActiveRecord::Base.connection.execute("TRUNCATE Table RESTART IDENTITY")
t=Tempfile.new("foo.zip")
url = open("url")
t.binmode
t.write stringIo.read
t.close
zip_file = Zip::File.open(t.path)
entry = zip_file.glob('*.csv').first
csv_text = entry.get_input_stream.read
csv = CSV.parse(csv_text, :headers=>true)
csv.each do |row|
Table.create(table columns)
end
end
end
Ruby核心包括Zlib支持。如果您有一个指向gzip文件的URL,您可以使用膨胀
open
返回的Tempfile
gzipped = open('URL')
csv_text = Zlib::GzipReader.new(gzipped).read
csv = CSV.parse(csv_text, :headers=>true)
你需要把它解压到某个地方,比如一个临时文件夹,然后阅读它。有多种方法可以做到这一点,我通常只是使用命令行压缩工具。我很快就会尝试!您好,您已经输入了
file.open/tmp/foo.zip
这是要打开的文件的名称吗?如果我从urltickets.com/data/data.csv
获取我的文件,我将如何获取此文件?确定添加了此文件,但我收到此错误,LoadError:无法加载此文件--zip
确定忽略最后一个错误!这是新的一个,namererror:main:Object`的未定义局部变量或方法
stringIo'可能应该是stringIo