2013-03-12 4 views
1

UPDATE 루비가 새로운 서브 디렉토리

아래에서 CSV 파일을 만들 좀 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 
    } 

- -UPDATE ---

dir 경로와 CSV 모듈을 지정할 때 문제가있는 것처럼 보입니다. 오류가 발생했습니다 Invalid argument - ["20130312113853"]/regions.csv (Errono::EINVAL) CSV 모듈 문서를 볼 때 CSV를 읽을 수있는 경로를 선언 할 수 있지만 다른 디렉토리에 작성/쓰기하는 방법은 없습니다. 이 모듈을 처음 사용했습니다. 누구든지이 접근 방법을 알고 있습니까?

csv = [] 전에 csv의 dir 경로를 선언해야한다고 생각하십니까?

Fullscript : FileUtils.mkdir 당신 can create one or more directories in a same time, it returns an Array of the directory created. 같은 Array을 반환하기 때문에

#!/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에있는 dirname이 열려 포함하지 작동해야합니까? 'Out = CSV.open ("# {outdir}/# {k} .csv", "w")' –

+0

@YuriyGolobokov 나는 그 편집을 만들었지 만 문제는 내가 선언하고있는 곳이라고 생각한다. 더 많은 정보와 전체 스크립트로 게시물을 업데이트했습니다. – tehaaron

답변

2

그것입니다. 당신은 단순히 직접 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

+0

@tehaaron 마지막 코드 단편은 사용중인 코드 단편입니까? 언제 당신이 디렉토리를 만들 수 있습니까 : 루프 또는 밖으로 루프? 스크립트를 다시 실행하거나 스크립트를 실행할 때 오류가 발생합니까? – toch

+0

분리 된 열기 및 닫기 대신 'CSV.open'이있는 블록을 사용하십시오. 그것은 루비 방식입니다. –