我找到了這段代碼,它很適合我,我把它改成了這個:
def write_in_file(file_name, hash)
column_names = hash.first.keys
s=CSV.generate do |csv|
csv << column_names
hash.each do |x|
csv << x.values
end
end
File.write("#{file_name}.csv", s)
end
這是我的哈希陣列的外觀:
[
{:Name => "John", :Age => 26, :Country => America},
{:Name => "Ivan", :Age => 34, :Country => Russia},
{:Name => "Pablo", :Age => 20, :Country => Columbia}
]
但問題是每次我呼叫這個方法時 - 它都會重寫整個檔案。如果我想保存此標題并在每次迭代中添加新資訊,如何更改它?
uj5u.com熱心網友回復:
您可以使用以下命令附加到現有檔案mode: 'a':(請參閱打開模式)
File.write("#{file_name}.csv", s, mode: 'a')
要僅在第一次運行時寫入標頭,您可以檢查檔案是否存在。此外,您應該使用固定標頭并按特定順序獲取哈希值,例如:
CSV.generate do |csv|
csv << %w[Name Age Country] unless File.exist?("#{file_name}.csv")
hash.each do |x|
csv << x.values_at(:Name, :Age, :Country)
end
end
File.write("#{file_name}.csv", s, mode: 'a')
還有CSV.open它為您創建檔案:
CSV.open("#{file_name}.csv", 'a') do |csv|
csv << %w[Name Age Country] if csv.stat.zero?
hash.each do |x|
csv << x.values_at(:Name, :Age, :Country)
end
end
由于在執行塊時檔案將始終存在,因此需要更改標頭檢查:csv.stat回傳檔案File::Stat并zero?確定檔案是否為空。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/380706.html
