Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 打开包含要在rake任务中使用的csv文件的zip文件_Ruby On Rails_Ruby_Csv - Fatal编程技术网

Ruby on rails 打开包含要在rake任务中使用的csv文件的zip文件

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

我有一个类似这样的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, :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
这是要打开的文件的名称吗?如果我从url
tickets.com/data/data.csv
获取我的文件,我将如何获取此文件?确定添加了此文件,但我收到此错误,
LoadError:无法加载此文件--zip
确定忽略最后一个错误!这是新的一个,
namererror:main:Object`的未定义局部变量或方法
stringIo'可能应该是
stringIo