require 'csv'
require 'yaml'
CSV.read (path_to_csv ,: headers => true)
, une instance de la classe CSV :: table sera renvoyée.
La méthode map
prend les éléments (instances de la classe CSV :: Row) un par un, et la méthode to_h
hache les éléments. Étant donné que la valeur de retour de la méthode map est un tableau, un tableau avec le hachage comme élément est créé. Le fait est que le nom de clé du hachage est le nom de colonne de CSV en ajoutant cette fois l'option : header => true
.hash_arr = CSV.read(path_to_csv, :headers => true).map(&:to_h)
=>[{"region_id"=>"1", "country_id"=>"1", "region_name"=>"Hokkaido"}, {"region_id"=>"2", "country_id"=>"1", "region_name"=>"Préfecture d'Aomori"},...]
File.open(path_to_yaml, 'w') { |f| f.write(hash_arr.to_yaml) }
Post-scriptum: Il semble que la même écriture puisse être faite ci-dessous. Merci pour votre commentaire!
IO.write path_to_yaml, hash_arr.to_yaml
P.S En dehors de là, je gérais une table (pays ou région) dont la valeur est fondamentalement inchangée dans DB, donc je l'ai convertie cette fois pour la gérer avec ActiveYaml. Même s'il est géré par ActiveYaml, c'est pratique car vous pouvez utiliser la table comme ActiveRecord (des méthodes de classe telles que all et find peuvent être utilisées).
Recommended Posts