我正在尝试使用 ruby 对 csv 文件的列重新排序。
前:
$ cat foo.csv
foo,bar,foobar
1,2,3,
4,5,6,
7,8,9,
Run Code Online (Sandbox Code Playgroud)
后:
bar,foo,foobar
2,1,3,
5,4,6,
8,7,9,
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我写出文件时,我得到了额外的“,”值,如下所示:
bar,foo,foobar
"2,1,3,
","5,4,6,
","8,7,9,
"
Run Code Online (Sandbox Code Playgroud)
谁能帮我确定为什么 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
Run Code Online (Sandbox Code Playgroud)
更新 删除了标题到 headers_array 的不必要转换
小智 5
这是另一种方法,通过转置列将列转换为行,然后将行foo与bar行交换,然后再次转置:
require 'csv'
csv = CSV.read("./foo.csv", { headers: true, return_headers: false })
csv = csv.to_a.transpose
csv[0],csv[1] = csv[1],csv[0]
csv = csv.transpose
CSV.open("./foo.csv", "wb") do |lines|
csv.each { |line| lines << line }
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3181 次 |
| 最近记录: |