gpt4 book ai didi

ruby - 将新列添加到 ruby​​ 中 .csv 的每一行

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:46 25 4
gpt4 key购买 nike

我正在尝试将一个新列附加到现有 csv 文件的每一行。下面的代码执行我想要的:

csv_info = CSV.read("foo.csv")
csv_info.each do |info|
info << new_object
end

当我使用 pry 时,在内存中给我以下内容:

[[uuid0, account0, url0, new_object],
[uuid1, account1, url1, new_object]]

这不会写入文件,因为它是 CSV.read 而不是 CSV.open("foo.csv","w")。当我尝试用 csv_info 对象覆盖文件时:

csv_info = CSV.read("foo.csv")
csv_info.each do |info|
info << new_object
end
CSV.open("foo.csv", "w") do |old_csv|
old_csv << csv_info
end

文件最终是这样的:

[["[\"<uuid0>\", \"<account0>\", \"<url0>\", \"<new_object>\"]",
"[\"<uuid1>\", \"<account1>\", \"<url1>\", \"<new_object>\"]"]]

如何在不影响 csv 格式的情况下追加?

最佳答案

在您的示例中,您正在读取整个 CSV 文件并在内存中对其进行操作。相反,我建议一次读取和修改一行,尤其是当 CSV 文件很大时。

这是对临时文件逐行修改,然后用生成的临时文件替换原始文件的方法。

require "csv"
require "fileutils"
require "tempfile"

temp = Tempfile.new("csv")

CSV.open(temp, "w") do |temp_csv|
CSV.foreach("foo.csv") do |orig|
temp_csv << orig + ["new_object"]
end
end

FileUtils.mv(temp, "foo.csv", :force => true)

关于ruby - 将新列添加到 ruby​​ 中 .csv 的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29126068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com