如何在Ruby中将CSV文件转换为哈希并进行常规操作
在Ruby中将CSV转换为哈希并处理的方法
Ruby自带的csv标准库就能轻松完成这个需求,不需要额外安装gem。以下是具体实现步骤和操作示例:
1. 基础转换:CSV转为哈希数组
首先导入csv库,读取文件时指定headers: true参数,让第一行表头作为哈希的键,每行数据对应哈希的值。最后通过map(&:to_h)把CSV库返回的CSV::Row对象转为普通Ruby哈希。
示例代码:
require 'csv' # 读取CSV文件,转为哈希数组 cars = CSV.read('你的文件名.csv', headers: true).map(&:to_h) # 输出第一个哈希查看结构 p cars.first # => {"make"=>"dodge", "model"=>"charger", "color"=>"black", "doors"=>"4"}
如果处理超大CSV文件,用CSV.foreach更节省内存(逐行读取处理,不会一次性加载整个文件到内存):
require 'csv' cars = [] CSV.foreach('你的文件名.csv', headers: true) do |row| cars << row.to_h end
2. 数据类型转换(可选)
默认所有值都是字符串类型,如果需要把doors这类字段转为整数,可以在转换时额外处理:
cars = CSV.read('你的文件名.csv', headers: true).map do |row| car_hash = row.to_h # 把doors字段转为整数 car_hash['doors'] = car_hash['doors'].to_i car_hash end p cars.first['doors'] # => 4(整数类型)
3. 像普通哈希一样处理数据
转换完成后,就可以用Ruby哈希的常规方法操作数据了:
示例1:筛选特定颜色的车辆
# 筛选黑色的车 black_cars = cars.select { |car| car['color'] == 'black' } p black_cars
示例2:统计各品牌的车辆数量
make_count = cars.each_with_object(Hash.new(0)) do |car, count| count[car['make']] += 1 end p make_count # => {"dodge"=>1, "ford"=>2, "nissan"=>1, "mazda"=>1, "honda"=>1, "corvette"=>1}
示例3:查找某款车型的信息
miata = cars.find { |car| car['model'] == 'miata' } p miata # => {"make"=>"mazda", "model"=>"miata", "color"=>"white", "doors"=>"2"}
内容的提问来源于stack exchange,提问作者burner
相关产品推荐
相关产品推荐

