我想用ruby重新排序csv文件的列。如何重新排列csv文件中列的顺序?
前:
$ cat foo.csv
foo,bar,foobar
1,2,3,
4,5,6,
7,8,9,
后:
bar,foo,foobar
2,1,3,
5,4,6,
8,7,9,
不幸的是,当我写出来的文件,我得到额外的 “” 值,就像这样:
bar,foo,foobar
"2,1,3,
","5,4,6,
","8,7,9,
"
任何人都可以帮助我确定为什么多余的引号出现在csv文件中?
我对ruby很新,所以如果我的代码不够理想,我可以接受其他想法。
require 'csv'
acsv = CSV.read("./foo.csv", {headers:true, return_headers:false})
@headers = CSV.open("./foo.csv", 'r', :headers => true).read.headers
# Rearrange headers
temp_index = @headers[0]
@headers[0] = @headers[1]
@headers[1] = temp_index
# Rearrange Columns
acsv.each do |row|
temp_index = row[0]
row[0] = row[1]
row[1] = temp_index
end
puts "acsv is"
puts "#{acsv}"
# Example to write headers http://stackoverflow.com/questions/15905985/how-to-write-columns-header-to-a-csv-file-with-ruby
newcsv = CSV.open("bar.csv", "wb", write_headers: true, headers: @headers) do |csv|
csv << acsv
end
更新 删除头的不必要的转换到headers_array
您的CSV文件是什么样子的?为什么你的CSV在最后有一个尾随逗号? –
@Cupcake我编辑了这个问题,它字面上写着foo,bar,foobar ... – spuder
为什么你的CSV在最后有一个尾随的逗号? –