當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Ruby CSV.open用法及代碼示例

本文簡要介紹ruby語言中 CSV.open 的用法。

用法

open(file_path, mode = "rb", **options ) → new_csv
open(io, mode = "rb", **options ) → new_csv
open(file_path, mode = "rb", **options ) { |csv| ... } → object
open(io, mode = "rb", **options ) { |csv| ... } → object

可能的選項元素:

hash form:
  :invalid => nil      # raise error on invalid byte sequence (default)
  :invalid => :replace # replace invalid byte sequence
  :undef => :replace   # replace undefined conversion
  :replace => string   # replacement string ("?" or "\uFFFD" if not specified)
  • 參數 path 如果給定,則必須是文件的路徑。

  • 參數 io 應該是一個 IO 對象,即:

    • 開放閱讀;返回時, IO 對象將被關閉。

    • 定位在開頭。要定位在末尾,要追加,請使用方法 CSV.generate 。對於任何其他定位,請改為傳遞預設的 StringIO 對象。

  • 參數 mode ,如果給定,必須是文件模式參見 Open Mode

  • 參數 **options 必須是關鍵字選項。請參閱生成選項。

  • 此方法可選擇接受一個額外的 :encoding 選項,您可以使用該選項指定從 pathio 讀取的數據的 Encoding 。除非您的數據采用 Encoding::default_external 給出的編碼,否則您必須提供此信息。解析將使用它來確定如何解析數據。您可以提供第二個 Encoding ,以便在讀取數據時對其進行轉碼。例如,

    encoding: 'UTF-32BE:UTF-8'

    將從文件中讀取UTF-32BE數據,但在解析之前將其轉碼為UTF-8

這些示例假定事先執行:

string = "foo,0\nbar,1\nbaz,2\n"
path = 't.csv'
File.write(path, string)

沒有給出塊,返回一個新的 CSV 對象。

使用文件路徑創建 CSV 對象:

csv = CSV.open(path)
csv # => #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">

使用打開的文件創建 CSV 對象:

csv = CSV.open(File.open(path))
csv # => #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">

給定一個塊,使用創建的 CSV 對象調用該塊;返回塊的返回值:

使用文件路徑:

csv = CSV.open(path) {|csv| p csv}
csv # => #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">

輸出:

#<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">

使用打開的文件:

csv = CSV.open(File.open(path)) {|csv| p csv}
csv # => #<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">

輸出:

#<CSV io_type:File io_path:"t.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">

如果參數不是 String 對象或 IO 對象,則引發異常:

# Raises TypeError (no implicit conversion of Symbol into String)
CSV.open(:foo)

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 CSV.open。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。