有一个程序可以生成巨大的CSV文件。例如:
arr = (0..10).to_a
CSV.open("foo.csv", "wb") do |csv|
(2**16).times { csv << arr }
end
它会生成一个大文件,因此我希望在运行中 ,而不是输出非压缩的CSV文件({{ 1}}),输出一个bzip压缩的CSV文件(foo.csv
)。
我有一个例子来自&#34; ruby-bzip2&#34;宝石:
foo.csv.bzip
我不确定如何从CSV编写Bzip2写入。
答案 0 :(得分:3)
您还可以使用IO或类似于IO的内容构建CSV
对象,例如Bzip2::Writer
。
例如
File.open('file.bz2', 'wb') do |f|
writer = Bzip2::Writer.new f
CSV(writer) do |csv|
(2**16).times { csv << arr }
end
writer.close
end
答案 1 :(得分:3)
将CSV数据写入 stdout 可能会更灵活:
# csv.rb
require 'csv'
$stdout.sync = true
arr = (0..10).to_a
(2**16).times do
puts arr.to_csv
end
...并将输出传递给bzip2
:
$ ruby csv.rb | bzip2 > foo.csv.bz2