0

我试图找出从 CSV 文件中提取值的最佳方法,该文件lookup.csv基于.master.csvoutput.csv

在下面的示例中,主文件具有三列数据,最后一列是City. 我想用文件中的名称替换City名称。City Codelookup.csv

我没有可以查找的数据库,因此我必须使用 CSV 文件。我正在尝试将 FasterCSV 与 Ruby 1.8.7 一起使用。

示例文件结构:

主.csv:

First Name | Last Name | City
Joey       | Jello     | Atlanta
Home       | Boy       | Dallas

查找.csv:

City    | City ID
Atlanta | 12345
Dallas  | 12346
Houston | 12347

输出.csv:

First Name | Last Name | City
Joey       | Jello     | 12345
Home       | Boy       | 12346
4

1 回答 1

1

我使用的是 1.9,在标准库FasterCSV中可用。CSV首先,我将创建一个查找散列lookup.csv

cities = Hash[CSV.read('lookup.csv', :col_sep => ' | ').to_a[1..-1]]

如果文件非常大,您可能需要遍历它CSV.foreach并逐行构建哈希:

cities = {}
CSV.foreach('lookup.csv', :col_sep => ' | ', :headers => true, :return_headers => false) do |line|
  cities[line['City']] = line['City ID']  
end  

然后迭代master.csv,在哈希中查找城市并将其写入output.csv

CSV.open('output.csv', "w", :headers => ['First Name', 'Last Name', 'City ID'], :write_headers => true) do |output|
  CSV.foreach('master.csv', :col_sep => ' | ', :headers => true, :return_headers => false) do |line|
    output << [line['First Name'], line['Last Name'], cities[line['City']]]
  end  
end
于 2012-06-20T21:08:44.467 回答