gpt4 book ai didi

ruby - 如何使用 FasterCSV 更改 CSV 文件中的标题然后保存新标题?

转载 作者:数据小太阳 更新时间:2023-10-29 07:44:42 24 4
gpt4 key购买 nike

我无法理解 FasterCSV 中的 :header_converters 和 :converters。基本上,我想做的就是将列标题更改为相应的列名。

类似于:

FasterCSV.foreach(csv_file, {:headers => true, :return_headers => false, :header_converters => :symbol, :converters => :all} ) do |row|
puts row[:some_column_header] # Would be "Some Column Header" in the csv file.

execpt 我不理解转换器参数中的 :symbol 和 :all。

最佳答案

: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。

header 转换器改变了 header 用于索引行的方式。例如,如果做这样的事情:

FastCSV.foreach(some_file, :header_converters => :downcase) do |row|

您可以将标题为“Some Header”的列索引为 row['some header']

如果您使用 :symbol 代替,您将使用 row[:some_header] 对其进行索引。 Symbol 将标题名称小写,将空格替换为下划线,并删除 a-z、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

关于ruby - 如何使用 FasterCSV 更改 CSV 文件中的标题然后保存新标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/940774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com