【发布时间】:2021-03-12 21:03:38
【问题描述】:
我正在使用
CSV.open(filename, "w") do |csv|
在一个 ruby.rb 文件中创建并写入 csv 文件,现在我需要打开它并在第二个 .rb 文件中对其进行编辑。现在我正在使用CSV.open(filename, "a") do |csv|,但这会创建新行而不是将新内容添加到现有行的末尾。
如果我第二次使用CSV.open(filename, "w") do |csv|,它会覆盖第一行。
编辑:
# Create export CSV
final_export_csv = "filepath_final.csv"
# Create filename for CSV file
imported_csv_filename = "imported_file.csv"
CSV.open(final_export_csv, "w", headers: ["several", "headers"] + [:new_header], write_headers: true) do |final_csv|
# Read existing CSV file
CSV.foreach(imported_csv_filename) do |old_csv_row|
# Read a row, add the new column, write it to the new row
CSV.open(denominator_csv_filename, "r+") do |new_csv_col|
# gathering some data code
data = { passed.in }
# Write data
new_csv_col <<
[
passedin[:data]
]
old_csv_row[:new_header] = passedin[:data]
final_export_csv << old_csv_row
end
end
end
end
end
【问题讨论】:
-
您无法轻松地就地重写文本文件。您需要将其全部读入,然后在进行任何修改后将其全部写回。
-
如果你只是想添加另一个名为
"new_col"的列,其元素由数组arr给出,你可以使用普通的文件方法:File.open('out', 'w') do |fout|; File.foreach('in', chomp: true).with_index { |line,i| fputs ',' + line + i.zero? ? "new_col" : arr[i-1] }; end。