如何修改 ruby​​ 中现有的 csv 列?

San*_*rma 2 ruby csv

我有一个 CSV 文件。在 csv 中,某些字段是空白的。我想用一些值更新这些字段。我尝试跟随但没有运气。

CSV.foreach("/home/mypc/Desktop/data.csv", { encoding: "UTF-8", headers: true, header_converters: :symbol, converters: :all}).with_index do |row,i|
   if row[:images].nil?
      row[:images] << ['im1']
   end
end
Run Code Online (Sandbox Code Playgroud)

Eri*_*nil 5

row[:images] ||= "im1"
Run Code Online (Sandbox Code Playgroud)

如果images该行的单元格为空,则将其设置为。"im1"

如果您想使用更新的单元格编写新的 CSV 文件,您可以使用:

require 'csv'

write_parameters = { write_headers: true, headers: %w(images name) }
read_parameters  = { encoding: 'UTF-8',
                     headers: true,
                     header_converters: :symbol,
                     converters: :all }

CSV.open('new_data.csv', 'w+', write_parameters) do |new_csv|
  CSV.foreach('data.csv', read_parameters) do |row|
    row[:images] ||= 'im1'
    new_csv << row
  end
end
Run Code Online (Sandbox Code Playgroud)

data.csv

images,name
im2,name2
im3,name3
,name1
im4,name4
im5,
Run Code Online (Sandbox Code Playgroud)

new_data.csv变成:

images,name
im2,name2
im3,name3
im1,name1
im4,name4
im5,
Run Code Online (Sandbox Code Playgroud)

如果您确定写入new_data.csv正确,可以删除data.csv并重命名new_data.csvdata.csv.

我不会写data.csv在原地。如果出现任何问题,您就会丢失数据。