1

下面更新

我有一个 Ruby 脚本,它遍历一些 JSON 并使用数据创建多个 .CSV 文件。目前它只是在与脚本/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 = []吗?

全文:

#!/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
4

1 回答 1

2

这是因为FileUtils.mkdir返回一个Array,因为您可以同时创建一个或多个目录,它返回一个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
于 2013-03-12T19:21:08.540 回答