Ruby CSV 文件创建仅输出一长行

Ruby CSV File creation outputting only one long row

我在 Ruby 中创建 CSV 文件时遇到问题。这是我的代码:

filename = "filename-#{Time.now}.csv"
#temp_csv = Tempfile.new(filename)
csv_header = ["example", "example", "example", "example", "example"]
new_csv = CSV.open(filename, 'w') do |csv_object|
  csv_object << csv_header
  normalized_data.each do |data|
    csv_object << data
  end
end

现在,我的问题是 filename 保存到磁盘时看起来非常好,有多行。当我使用 binding.pry 检查 data 时,它看起来就像它应该的那样,一个包含元素的数组。但是,如果我保存 new_csv 并打开它,所有内容都被塞进一个很长的行,以 [[ 开头,这意味着所有内容似乎都包含在一个数组中...... 为什么是这样?我很困惑,我花了几个小时试图解决这个问题。

Ps。 #tmp_csv 被注释掉了,因为该策略也不起作用,但最终我想创建的是一个临时文件。

如有任何帮助,我们将不胜感激。

更多信息编辑:

正如我所说,filename 实际上在我的系统中创建得很好,但是我随后尝试使用 Dropbox API 中的 put_file 方法将此文件上传到 Dropbox,并且当我在 Dropbox 中打开它,所有内容都在一行中。

我上传的方式是:

client.put_file("#{DROPBOX_PATH}/example_file_#{Time.now}.csv", file_name) 当我在保管箱中打开它时,所有内容都在一行中。

这是我的 normalized_data 的样子,我相信这很好:

[["text",
  "text",
  "text",
  "2016-02-09",
  3,
  "text",
  {},
  false,
  "text",
  {"text"=>{}, "text"=>1},
  ["text", "text", "text"],
  "text",
  {"text"=>"text", "text2"=>{}}],
...
...

按原样保存 new_csv 没有任何意义,因为它是 CSV.open(filename, 'w') 的结果。是的,它是一个数组数组,它​​是 CSV 在 ruby 中的表示方式(一个行数组,每一行都是一个列数组。)

不清楚,为什么要尝试直接保存new_csv。基本上,此操作将上述数组数组转换为字符串并将此字符串存储在文件中。

正如您所指出的,CSV 本身已正确写入(filename)。无论您想在代码中继续使用 CSV,数组的数组都是您的选择。

希望对您有所帮助。

我猜你的 normalized_data 要么是像 [[['a', 'b'],['c', 'd']]] 这样的三重数组,要么是像 ['a', 'b', 'c'].

这样的平面数组

应该是[['a', 'b', 'c'],['d', 'e', 'f']]这样的数组数组。 或平面阵列

你的 normalized_data 应该看起来像 [['a', 'b', 'c']

使用此代码:

require 'csv'

normalized_data = [['a', 'b', 'c'], ['d', 'e', 'f']]
new_data = CSV.open('file.csv', 'w') do |csv|
  normalized_data.each do |data|
    csv << data
  end
end

puts "New data:"
puts new_data.inspect
puts "File contents:"
puts File.read('file.csv')

输出符合预期:

New data:
[["a", "b", "c"], ["d", "e", "f"]]
File contents:
a,b,c
d,e,f