转换器:all
意味着它会尝试所有的内置转换器,具体来说:
:integer: Converts any field Integer() accepts.
:float: Converts any field Float() accepts.
:date: Converts any field Date::parse() accepts.
:date_time: Converts any field DateTime::parse() accepts.
本质上,这意味着它将尝试将任何字段转换为这些值(如果可能),而不是将它们保留为字符串。因此,如果您这样做row[i]
并且它会返回字符串值“9”,它将改为返回整数值 9。
标头转换器改变了标头用于索引行的方式。例如,如果做这样的事情:
FastCSV.foreach(some_file, :header_converters => :downcase) do |row|
您可以将标题为“Some Header”的列索引为row['some header']
.
如果你:symbol
改用它,你会用row[:some_header]
. 符号将标题名称小写,用下划线替换空格,并删除 az、0-9 和 . 以外的字符_
。它很有用,因为符号的比较比字符串的比较快得多。
如果要使用 索引列row['Some Header']
,则不要提供任何:header_converter
选项。
编辑:
恐怕,对于您的评论, headers_convert 不会做您想做的事。它不会更改标题行的值,只是它们如何用作索引。相反,您必须使用该:return_headers
选项、检测标题行并进行更改。要更改文件并再次将其写出,您可以使用以下内容:
require 'fastercsv'
input = File.open 'original.csv', 'r'
output = File.open 'modified.csv', 'w'
FasterCSV.filter input, output, :headers => true, :write_headers => true, :return_headers => true do |row|
change_headers(row) if row.header_row?
end
input.close
output.close
如果您需要完全替换原始文件,请在执行上述操作后添加此行:
FileUtils.mv 'modified.csv', 'original.csv', :force => true