我有一个目录,其中包含一堆没有标题的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:
选项可以正常工作,但事实并非如此。
我如何完成我想要做的事情?
答案 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)
现在你绝对希望拥有原始数据的备份以防出现可怕的错误。