在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
打开它,所有内容都会卡在一个非常长的行中,以[[
开头,意味着一切似乎都被包裹在一个数组中......
为什么是这样?我很难过,我花了几个小时试图解决问题。
聚苯乙烯。
#tmp_csv
已被注释掉,因为该策略也不起作用,但最终我想创建的是一个临时文件。
非常感谢任何帮助。
更多信息修改:
正如我所说,filename
实际上是在我的系统中很好地创建的,但是我尝试使用Dropbox API中的put_file方法将此文件上传到Dropbox,当我在Dropbox中打开它时,所有内容都在一个线。
我上传的方式是:
client.put_file("#{DROPBOX_PATH}/example_file_#{Time.now}.csv", file_name)
当我在Dropbox中打开它时,一切都变成了一行。
这就是我normalized_data
的样子,我相信这很好:
[["text",
"text",
"text",
"2016-02-09",
3,
"text",
{},
false,
"text",
{"text"=>{}, "text"=>1},
["text", "text", "text"],
"text",
{"text"=>"text", "text2"=>{}}],
...
...
答案 0 :(得分:1)
按原样保存new_csv
没有任何意义,因为它是CSV.open(filename, 'w')
的结果。是的,它是一个数组数组,它是如何在ruby中表示CSV(行数组,每一行都是列数组。)
目前还不清楚,为什么要尝试直接保存new_csv
。 Basicaly,此操作将上面提到的数组数组转换为字符串,并将此字符串存储在文件中。
正如您所指出的,CSV本身已正确写入(filename
)。无论您是想在代码中继续使用CSV,都可以选择阵列数组。
希望它有所帮助。
答案 1 :(得分:0)
我的猜测是normalized_data
是[[['a', 'b'],['c', 'd']]]
之类的三重数组或['a', 'b', 'c']
之类的平面数组。
应该是一个像[['a', 'b', 'c'],['d', 'e', 'f']]
这样的数组数组。
或平面阵列
您的normalized_data应该像[[&#39; a&#39;,&#39; b&#39;,&#39; c&#39;]
使用此代码:
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