Ruby--如何處理csv文件?

csv文件簡介

逗號分隔值(Comma-Separated Values,CSV,有時也稱爲字符分隔值,因爲分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。
CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號或製表符。
csv文件可以用文本編輯器打開,也可以用excel和wps類軟件打開。

ruby如何處理csv文件

1,ruby有一個標準庫用於處理csv文件,在代碼中引入即可:
require ‘csv’

2,寫csv文件的2個方法
CSV.open(“path/to/file.csv”, “wb”) do |csv|
csv << [“row”, “of”, “CSV”, “data”]
csv << [“another”, “row”]
# …
end

csv_string = CSV.generate do |csv|
csv << [“row”, “of”, “CSV”, “data”]
csv << [“another”, “row”]
# …
end

3,讀取csv文件的2個方法
一次讀入一行:
CSV.foreach(“path/to/file.csv”) do |row|
# use row here…
end

一次讀入全部文件:
arr_of_arrs = CSV.read(“path/to/file.csv”)

一次讀入全部文件後,可以再用each方法逐行處理:
CSV.open(“path/to/file.csv”, “rb”).each do |row|
# use row here…
end

4,實例
任意找一個路徑,打開irb,即可運行如下示例代碼。

2.1.1 :001 > filename = “books.csv”
“books.csv”
2.1.1 :002 > require ‘csv’
true
2.1.1 :003 > CSV.open(filename, “wb”) do |csv|
2.1.1 :004 > csv << [“name”, “price”]
2.1.1 :005?> csv << [“How to learn ruby”, 12.34]
2.1.1 :006?> csv << [“How to learn C++”, 10.11]
2.1.1 :007?> end
<#CSV io_type:File io_path:”books.csv” encoding:ASCII-8BIT lineno:3 col_sep:”,” row_sep:”\n” quote_char:”\”“>
2.1.1 :008 >
2.1.1 :009 > CSV.foreach(filename, headers: true) do |row|
2.1.1 :010 > puts row
2.1.1 :011?> puts “name: #{row[“name”]}, price: #{row[“price”]}”
2.1.1 :012?> end
How to learn ruby,12.34
name: How to learn ruby, price: 12.34
How to learn C++,10.11
name: How to learn C++, price: 10.11
nil
2.1.1 :013 > CSV.foreach(filename, headers: true) do |row|
2.1.1 :014 > puts row.class
2.1.1 :015?> end
CSV::Row
CSV::Row
nil
2.1.1 :016 > CSV.open(filename, “rb”) do |row|
2.1.1 :017 > puts row
2.1.1 :018?> end

nil
2.1.1 :019 > CSV.open(filename, “rb”).each_line do |row|
2.1.1 :020 > puts row.class
2.1.1 :021?> end
NoMethodError: undefined method each_line' for #<CSV:0x00000001d15848>
from (irb):19
from /home/liukun/.rvm/rubies/ruby-2.1.1/bin/irb:11:in

2.1.1 :022 > CSV.open(filename, “rb”).each do |row|
2.1.1 :023 > puts row.class
2.1.1 :024?> puts row
2.1.1 :025?> end
Array
name
price
Array
How to learn ruby
12.34
Array
How to learn C++
10.11
nil
2.1.1 :026 > CSV.open(filename, “rb”).each do |row|
2.1.1 :027 > p row
2.1.1 :028?> end
[“name”, “price”]
[“How to learn ruby”, “12.34”]
[“How to learn C++”, “10.11”]
nil
2.1.1 :029 >
2.1.1 :030 >
2.1.1 :031 >
2.1.1 :032 > CSV.generate(“books_tow.csv”) do |csv|
2.1.1 :033 > csv << [“name”, “price”]
2.1.1 :034?> csv << [“Chinese”, 12.11]
2.1.1 :035?> csv << [“English”, 11.22]
2.1.1 :036?> end
“books_tow.csvname,price\nChinese,12.11\nEnglish,11.22\n”
2.1.1 :037 >

5,參考資料
ruby官方文檔
http://ruby-doc.org/stdlib-2.3.0/libdoc/csv/rdoc/CSV.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章