根据另一个CSV中的值从一个CSV中提取值
我试图找出根据master.csv
的值从名为lookup.csv
的CSV文件中提取值的最佳方法,然后将新文件另存为output.csv
。
在下面的示例中,主文件有三列数据,最后一列是City
。 我想用lookup.csv
文件中的City Code
替换City
名称。
我没有可以查找的数据库,所以我不得不使用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
我正在使用1.9,其中FasterCSV
在标准库中可用作CSV
。 首先,我从lookup.csv
创建一个查找哈希:
cities = Hash[CSV.read('lookup.csv', :col_sep => ' | ').to_a[1..-1]]
如果文件非常大,您可能希望使用CSV.foreach
迭代它并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