CSV不会通过哈希键(Rails)导入CSV

时间:2018-06-13 14:53:10

标签: ruby-on-rails csv

我在导入此CSV时遇到问题:

municipality,province,province abbrev,country,region
Vancouver,British Columbia,BC,Canada,Metro Vancouver - North

具体来说,当我通过其键查找其值时,不会返回Vancouver

municipality_name = row["municipality"]

以下是代码:

def self.import_csv(file)
  CSV.foreach(file, headers: true,
                    skip_blanks: true,
                    skip_lines: /^(?:,\s*)+$/,
                    col_sep: ",") do |row|

    municipality_name = row["municipality"]
    puts row.to_h
    puts "municipality_name: #{municipality_name}"
    puts "row[0]: #{row[0]}"
  end
end

这是输出:

irb(main):052:0> Importers::Municipalities.import_csv('tmp/municipalities.csv')
{"municipality"=>"Vancouver", "province"=>"British Columbia", "province abbrev"=>"BC", "country"=>"Canada", "region"=>"Metro Vancouver - North"}
municipality_name:
row['municipality']:
row[0]: Vancouver

似乎我错过了一些明显的东西。我想也许CSV中有一个隐藏的角色,但在Sublime中打开隐藏的角色而没有骰子。

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果您想通过其密钥访问该行,则需要在该行上调用to_h。否则,它是一个类似于数组的对象,可以通过索引访问。

def self.import_csv(file)
  CSV.foreach(file, headers: true,
                    skip_blanks: true,
                    skip_lines: /^(?:,\s*)+$/,
                    col_sep: ",") do |row|
    row = row.to_h
    municipality_name = row["municipality"]
    puts "municipality_name: #{municipality_name}"
  end
end

答案 1 :(得分:0)

似乎这是CSV的问题,代码工作正常。创建了一个新的CSV,输入相同的内容,并且有效。也许Sublime没有展现出一个看不见的角色?因为我擦除了导致问题的原始CSV,无法验证。