当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。