2015-09-06 90 views
2

我對ruby很新。這是我的代碼:我需要從一個巨大的csv文件複製3列到一個新的csv文件。怎麼做?

require 'csv' 

csv = CSV.read('C:\Users\hp1\Desktop\Datasets\000.csv', :headers=>true) 

p csv['timestamp'] 
f = File.new('C:\Users\hp1\Desktop\Datasets\Columns_000.csv', 'wb') 
    f.puts(p) 
    f.close 

我想在此代碼做的是,我想讀000.csv文件,並命名爲「時間戳」列複製到另一個CSV,Columns_000.csv。

但是會發生什麼呢,它會在我的終端上寫入時間戳列的值。相反,我希望它把它們寫在新的csv上。

而且我還有2個像我想複製到新的csv那樣的列。有沒有辦法將它們全部複製到一起,還是需要將它們逐一複製?

回答

1
COLUMNS = ['timestamp', 'other1', 'other2'] 

# open new csv for writing 
CSV.open("C:\Users\hp1\Desktop\Datasets\000_out.csv", "wb") do |csv| 
    # iterating existing csv rows 
    CSV.foreach('C:\Users\hp1\Desktop\Datasets\000.csv', :headers=>true) do |row| 
    # select only those specified above columns 
    csv << COLUMNS.map { |col| row[col] } 
    end 
end 
+0

哇!非常感謝!有用! 但你能幫我理解嗎?比如,什麼是「<<」?它不應該是按位左移運算符嗎? 「地圖」究竟做了什麼? – Kristada673

+0

有一位優秀的老師隨時準備幫助您理解任何代碼;她的名字是Ruby文檔:['Array#<<'](http://ruby-doc.org/core-2.0.0/Array.html#method-i-3C-3C); ['陣列#map'](http://ruby-doc.org/core-2.0.0/Array.html#method-i-map)。 ['CSV'](http://ruby-doc.org/stdlib-2.0.0/libdoc/csv/rdoc/CSV.html)BTW。 – mudasobwa

+0

哈哈。是的,我問了很多次之前就去過這裏,你知道的。但她解釋不好。例如,她提到,「#在這裏使用行......」;但在這裏應該如何使用這一行,她並沒有說。無論如何,感謝一噸:) – Kristada673

相關問題