以下更新
我有一个Ruby脚本,它循环一些JSON并使用数据创建多个.CSV文件。目前它只是在与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
}
--- --- UPDATE
当我指定dir路径和CSV模块时,问题出现了。我收到错误Invalid argument - ["20130312113853"]/regions.csv (Errono::EINVAL)
当我查看CSV模块文档时,我看到您可以声明读取CSV的路径,但在另一个目录中创建/写入它们没有任何内容。这是我第一次使用这个模块。有谁知道如何处理这个问题?
我想我需要在csv = []
之前声明csv的目录路径?
Fullscript:
#!/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
答案 0 :(得分:2)
这是因为FileUtils.mkdir
与can create one or more directories in a same time, it returns an Array
of the directory created.一样返回Array
。
如果您只是直接使用time
,则代码应该正常工作
...
FileUtils.mkdir(time)
FileUtils.cd(time) do
filename = k+".csv"
out = CSV.open(filename, "w")
csv.each{|item| out << item}
out.close()
end