如何将标题写入现有CSV?

mar*_*ion 1 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
Run Code Online (Sandbox Code Playgroud)

我希望这个write_headersheaders:选项能够起作用,但事实并非如此.

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

tad*_*man 7

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

通常你会用某种临时文件来做这件事:

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)
Run Code Online (Sandbox Code Playgroud)

现在,您绝对希望备份原始数据,以防出现严重错误.