gpt4 book ai didi

ruby - 如何重新排列 csv 文件中列的顺序?

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:52 25 4
gpt4 key购买 nike

我正在尝试使用 ruby​​ 对 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 的转换

最佳答案

这是您可以执行此操作的另一种方法,通过将列转置为行,然后将 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

关于ruby - 如何重新排列 csv 文件中列的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22886857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com