2013-03-12 71 views
1

更新下紅寶石在新的子目錄

創建CSV文件,我有一個是通過一些循環JSON和創建與數據的多個.CSV文件的Ruby腳本。目前它只是創建與腳本/ 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 ---

它出現的問題是,當我指定的目錄路徑和CSV模塊。我收到錯誤Invalid argument - ["20130312113853"]/regions.csv (Errono::EINVAL) 當我看CSV模塊文檔我看你可以創建/在另一個direcotry書面形式向他們申報的路徑讀取的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 
+3

爲什麼不包括目錄名稱爲CSV打開? 'out = CSV.open(「#{outdir} /#{k} .csv」,「w」)' – 2013-03-12 17:40:15

+0

@YuriyGolobokov我做了那個編輯,但我認爲這個問題是我聲明它的地方。我用更多的信息和完整的腳本更新了這篇文章。 – tehaaron 2013-03-12 18:52:45

回答

2

這是因爲FileUtils.mkdir返回Arraycan create one or more directories in a same time, it returns an Array of the directory created.

如果你簡單地time直接工作,你的代碼應工作

... 
FileUtils.mkdir(time) 
FileUtils.cd(time) do 
    filename = k+".csv" 
    out = CSV.open(filename, "w") 
    csv.each{|item| out << item} 
    out.close() 
end 
+0

這是最接近我讓它工作,因爲它創建目錄並創建第一個CSV,但然後給出錯誤''mkdir':文件存在 - 20130312131351(Errno :: EEXIST)'。看起來它每次創建文件時都試圖創建相同的文件夾? – tehaaron 2013-03-12 20:16:58

+0

@tehaaron是您的最後一個代碼段使用一個?你什麼時候創建目錄:在循環中還是在循環中?當您再次運行腳本或腳本期間,您是否遇到該錯誤? – toch 2013-03-12 22:17:17

+0

使用帶'CSV.open'而不是離散開閉塊。這是Ruby的方式。 – 2013-03-12 22:43:31