Ruby 如何将标题写入现有CSV?

Ruby 如何将标题写入现有CSV?,ruby,csv,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

我有一个目录,里面有一堆没有标题的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_headers
headers:
选项会起作用,但不会


如何完成我要做的事情?

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

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

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)
CSV.open(CSV_file+'.tmp',w',write_头:true,头:[……])do|dest|
#转置原始数据
CSV.open(CSV_文件)do|源|
source.do每行|

dest您不能就地重新打开它们,尤其是在追加模式下。您需要打开一个新文件,写入标题,然后附加所有原始数据

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

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)
CSV.open(CSV_file+'.tmp',w',write_头:true,头:[……])do|dest|
#转置原始数据
CSV.open(CSV_文件)do|源|
source.do每行|

这就是我想要避免的。只需在顶部添加一行,我就必须重建整个CSV文件?无法在CSV文件中的位置
i[0]
粘贴新行?文件不是这样工作的,不能“插入”数据并让字节神奇地移动。附加是很容易的。预挂起涉及更多的工作,通常是重新写入整个文件。好的……我会考虑这个方法。我只是试了一下,效果很好。它实际上比我想象的要快得多。多谢!很高兴听到!是啊,有些事情的速度之快令人惊讶。这些天计算机真是太神奇了。这是我一直在努力避免的。只需在顶部添加一行,我就必须重建整个CSV文件?无法在CSV文件中的位置
i[0]
粘贴新行?文件不是这样工作的,不能“插入”数据并让字节神奇地移动。附加是很容易的。预挂起涉及更多的工作,通常是重新写入整个文件。好的……我会考虑这个方法。我只是试了一下,效果很好。它实际上比我想象的要快得多。多谢!很高兴听到!是啊,有些事情的速度之快令人惊讶。现在的电脑真是太神奇了。