我在导入此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中打开隐藏的角色而没有骰子。
提前致谢。
答案 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,无法验证。