我正在尝试找出根据lookup.csv
中的值从名为master.csv
的CSV文件中提取值的最佳方法,然后将新文件另存为output.csv
。
在下面的示例中,主文件包含三列数据,最后一列为City
。我想将City
名称替换为City Code
文件中的lookup.csv
。
我没有可以查找的数据库,因此我不得不使用CSV文件。我正在尝试使用FasterCSV和Ruby 1.8.7。
示例文件结构:
master.csv:
First Name | Last Name | City
Joey | Jello | Atlanta
Home | Boy | Dallas
lookup.csv:
City | City ID
Atlanta | 12345
Dallas | 12346
Houston | 12347
output.csv:
First Name | Last Name | City
Joey | Jello | 12345
Home | Boy | 12346
答案 0 :(得分: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