如何将标题写入现有CSV?

时间:2016-10-06 19:56:36

标签: ruby csv

我有一个目录,其中包含一堆没有标题的CSV文件。

我尝试这样做:

def add_headers_to_csvs
  csvs = Dir["#{@dir_name}/#{@state}/*.csv"]
  csvs.each do |csv_file|
    CSV.open(csv_file, "a+", write_headers: true, headers: ["Company_Name","Website","Street_Address", "City", "State", "Zip", "Phone","Email"]) do |csv|
    end
  end
end

我希望write_headersheaders:选项可以正常工作,但事实并非如此。

我如何完成我想要做的事情?

1 个答案:

答案 0 :(得分:6)

您不能只是在适当的位置重新打开它们,尤其是在追加模式下。您需要打开一个新文件,编写标题,然后附加所有原始数据。

通常你会使用某种临时文件来执行此操作:

CSV.open(csv_file + '.tmp', 'w', write_headers: true, headers: [ ...]) do |dest|
  # Transpose original data
  CSV.open(csv_file) do |source|
    source.each do |row|
      dest << row
    end
  end
end

# Swap new version for old
File.rename(csv_file + '.tmp', csv_file)

现在你绝对希望拥有原始数据的备份以防出现可怕的错误。