从数组中的 URL 下载文件,按另一个数组中的项目命名它们
Download files from URL's in array naming them by items in another array
我有一个包含两列的 CSV,我正在将每一列的数据推送到一个数组中。第 2 列包含我要下载的图像的 URL。如何将文件命名为第 1 列中的对应值?
require "open-uri"
require "csv"
members = []
photos = []
CSV.foreach('members.csv', :headers => true) do |csv_obj|
members << csv_obj[0]
photos << csv_obj[1]
end
photos.each {
|x| File.open({value from members array}, 'wb') do |fo|
fo.write open(x).read
end
}
试试这个:
require "open-uri"
require "csv"
members = []
photos = []
CSV.foreach('members.csv', :headers => true) do |csv_obj|
members << csv_obj[0]
photos << csv_obj[1]
end
photos.each_with_index do |photo, index|
File.open(members[index], 'wb') do |fo|
fo.write open(photo) { |file| file.read }
end
end
备注:
- 也尝试提交 CSV 文件的片段,这将有助于测试代码。
- 代码假定成员数组将包含带扩展名的文件名。
- 下载文件时使用
open
块的原因是为了确保关闭文件流。
- 我建议使用长的描述性变量名;它默默地记录您的意图并使代码非常可读。
wb
File.open
方法中的参数是确保以二进制模式写入文件。
我有一个包含两列的 CSV,我正在将每一列的数据推送到一个数组中。第 2 列包含我要下载的图像的 URL。如何将文件命名为第 1 列中的对应值?
require "open-uri"
require "csv"
members = []
photos = []
CSV.foreach('members.csv', :headers => true) do |csv_obj|
members << csv_obj[0]
photos << csv_obj[1]
end
photos.each {
|x| File.open({value from members array}, 'wb') do |fo|
fo.write open(x).read
end
}
试试这个:
require "open-uri"
require "csv"
members = []
photos = []
CSV.foreach('members.csv', :headers => true) do |csv_obj|
members << csv_obj[0]
photos << csv_obj[1]
end
photos.each_with_index do |photo, index|
File.open(members[index], 'wb') do |fo|
fo.write open(photo) { |file| file.read }
end
end
备注:
- 也尝试提交 CSV 文件的片段,这将有助于测试代码。
- 代码假定成员数组将包含带扩展名的文件名。
- 下载文件时使用
open
块的原因是为了确保关闭文件流。 - 我建议使用长的描述性变量名;它默默地记录您的意图并使代码非常可读。
wb
File.open
方法中的参数是确保以二进制模式写入文件。