を追加します。Parse a CSV file, update a field, then saveアップデートは、私はこの質問に似た何かをしようとしています、インプレースCSVラインにルビー
基本的に私は、各行が異なるを表し、各行は、IPアドレスのカンマ区切りリストを持つCSVを持っていますIPグループ。私は、このCSVを、各行ごとに各IPで動作する関数に渡します。その後、ステータスとタイムスタンプをラインに追加したいと思います。上記の解決策では、2番目のファイルを作成する必要があります。追加ファイルを作成せずにこれを行う方法はありますか?各行に追加するだけです。
CSV.open('csv_with_ips.csv', 'r+').each do |row|
<do some stuff>
row << 'SCANNED'
row << Time.now
end
入力されたCSVファイルの内容がメモリに収まりきらないほど小さければ、各行を処理して配列に格納し、一度にすべて同じ名前のファイルにダンプすることもできます。 –
これはうまくいくと思われますが、メモリを超えるファイルが読み取られるまで動作します。私が働いている環境では、ファイルはGBの10分の1によく見えますので、それらをスラッピングすると処理速度が低下しますが、行単位のIOは遅くなりません。それが良い考えではない理由については、いくつかのメトリクスについてはhttp://stackoverflow.com/q/25189262/128421を参照してください。それ以外に、書き込み中にコードがクラッシュすると、データファイルが破損します。生産データの保存は非常に重要です。 –
合意。参照リンクをありがとう。 –