0

我有一个 csv 文件,其中包含 7000 多条记录,我处理/操作并导出到新的 csv 文件。我这样做没有问题,一切都按预期工作。

我想将过程更改为将输出分成多个文件的位置。因此,不是将所有 7000+ 行写入新的 csv 文件,而是将前 1000 行写入 newexport1.csv,将接下来的 1000 行写入 newexport2.csv,直到到达数据的末尾。

在 Ruby 1.9 中使用 CSV 是否有简单的方法来做到这一点?

我目前的写法:

CSV.open("#{PATH_TO_EXPORT_FILE}/newexport.csv", "w+", :col_sep => '|', :headers => true) do |f|
export_rows.each do |row|
f << row
4

3 回答 3

2

最简洁的答案是不”。您需要调整当前代码以拆分集合,然后将每个子集转储到不同的文件中。这应该非常接近:

export_rows.each_slice(1000).with_index do |rows, idx|
  CSV.open("#{PATH_TO_EXPORT_FILE}/newexport-#{idx.to_s}.csv", "w+", :col_sep => '|', :headers => true) do |f|
    rows.each { |row| f << row }
  end
end
于 2013-03-06T17:25:52.697 回答
1

就在这里。它嵌入在 Ruby 1.9 中

检查此链接

读书:

CSV.foreach("path/to/file.csv") do |row|
   # manipulate the content
end

来写:

CSV.open("path/to/file.csv", "wb") do |csv|
   csv << ["row", "of", "CSV", "data"]
   csv << ["another", "row"]
   # something else
end

我认为您需要将一个与另一个结合起来。

于 2013-03-06T16:52:26.783 回答
0

FasterCSV 是自 ruby​​ 1.9 以来的标准 CSV 库,您可以在示例文件夹中找到大量示例代码: https ://github.com/JEG2/faster_csv/tree/master/examples

要使示例代码正常工作,您应该更改:

require "faster_csv"

为了

require "csv"
于 2013-03-06T17:07:08.473 回答