gpt4 book ai didi

ruby - 就地更新附加到 CSV 行,Ruby

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

我正在尝试做与这个问题类似的事情:Parse a CSV file, update a field, then save

基本上我有一个 CSV,每一行都有一个逗号分隔的 IP 列表,每一行代表一个不同的 IP 组。我将此 CSV 传递给一个函数,该函数对每行的每个 IP 执行一些操作。之后我想在行中附加一个状态和时间戳。上面的解决方案需要创建第二个文件,有没有办法在不创建附加文件的情​​况下执行此操作,只需附加到每一行就位?

CSV.open('csv_with_ips.csv', 'r+').each do |row|
<do some stuff>
row << 'SCANNED'
row << Time.now
end

最佳答案

不必创建一个新文件,但好的做法是您应该这么做。

用更长的行更新一行需要操作系统覆盖以下行和可能的后续行。如果代码在处理整个文件之前崩溃,则内容将被破坏。

另外,做你想做的事意味着你必须将整个文件读入内存,这不是一个好主意,因为你的代码不会很好地扩展。如果您不将其读入内存,您所写的行将踩到您要读取的下一行,从而破坏它。

数据的安全处理应该是这样的:

File.open('output.csv', 'w') do |fo|
File.foreach('input.csv') do |li|
# modify the input line "li"
fo.puts(li)
end
end

File.mv('input.csv', 'input.csv.bak')
File.mv('output.csv', 'input.csv')

但是,当然,您想要利用 CSV class Ruby 自带的,让它处理繁重的工作。 CSV 文件格式并不像人们想象的那么简单,而且很容易弄乱数据,因此请利用 CSV 类实现的功能。

关于ruby - 就地更新附加到 CSV 行,Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42285004/

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