以下の更新
いくつかのJSONをループし、データを使用して複数の.CSVファイルを作成するRubyスクリプトがあります。現在、script/JSONと同じフォルダーにそれらを作成するだけです。ただし、タイムスタンプが付けられた新しく作成されたサブディレクトリにファイルを作成する必要があります。
私は私が必要であることを知っていますrequire 'fileutils.rb'
そして私は作成time = Time.now.strftime("%Y%m%d%H%M%S%")
しそしてoutdir = FileUtils.mkdir(time)
これらをスクリプトに追加すると、ディレクトリは正常に作成されますが、壊れます。
ファイルを作成するスクリプトの終わりは次のようになります。問題は、ディレクトリに移動する方法/新しいディレクトリにファイルを作成する方法にあると思います。
...
outdir = FileUtils.mkdir(time)
FileUtils.cd(outdir) do #I think this is wrong
filename = k+".csv"
out = CSV.open(filename, "w")
csv.each{|item| out << item}
out.close()
end
}
- -アップデート - -
問題は、dirパスとCSVモジュールを指定するときに発生するようです。Invalid argument - ["20130312113853"]/regions.csv (Errono::EINVAL)
CSVモジュールのドキュメントを見ると、エラーが発生します。CSVを読み取るためのパスを宣言できますが、別のディレクトリでCSVを作成/書き込むことについては何も宣言できません。このモジュールを使用するのはこれが初めてです。誰かがこれにアプローチする方法を知っていますか?
前にcsvのdirパスを宣言する必要があると思いますcsv = []
か?
全文:
#!/usr/bin/env ruby
require 'json'
require 'csv'
require 'fileutils.rb'
file = "parse_me.json"
ff = JSON.parse(File.open(file).read)
time = Time.now.strftime("%Y%m%d%H%M%S")
outdir = FileUtils.mkdir(time)
begin
ff.each{|k,h|
csv = []
csv << h[0].keys
h.each{|arr|
holder = []
arr.each_value{|v|
holder << v
}
csv << holder
}
out = CSV.open("#{outdir}/#{k}.csv", "w")
csv.each{|item| out << item}
out.close()
}
end