如何在Ruby中顺序创建多个CSV文件?

时间:2015-09-30 11:12:11

标签: ruby csv

愚蠢的问题,但我想对数据集进行一些处理并将它们放入不同的CSV中,例如UDID1.csvUDID2.csv,...,UDID1000.csv。所以这是我的代码:

for i in 1..1000
    logfile = File.new('C:\Users\hp1\Desktop\Datasets\New File\UDID#{i}\.csv',"a")
    #I'll do some processing here
end

但由于UDID#{i}部分,程序在运行时会抛出错误。那么,如何克服这个问题呢?感谢。

编辑:这是错误:

in `initialize': No such file or directory @ rb_sysopen - C:\Users\hp1\Desktop\Datasets\New File\udid#{1}\.csv (Errno::ENOENT)from C:/Ruby21/bin/hashedUDID.rb:38:in `new' from C:/Ruby21/bin/hashedUDID.rb:38:in '<main>'

3 个答案:

答案 0 :(得分:2)

'是一个问题,另一个问题是路径。

在您的发布中,New File必须作为目录存在。在此目录中必须存在另一个目录,如UDID0001。这将获得.csv个文件。

正确是(我不使用非rubyesk for-loop):

1.upto(1000) do |i|
    logfile = File.new("C:\\Users\\hp1\\Desktop\\Datasets\\UDID#{i}.csv", "a")
    #I'll do some processing here
    logfile.close #Don't forget to close the file
end

"内,必须屏蔽反斜杠(\\)。相反,您可以使用/

logfile = File.new("C:/Users/hp1/Desktop/Datasets/New File/UDID#{i}/.csv", "a")

另一种可能性是使用%i来插入数字:

    logfile = File.new("C:/Users/hp1/Desktop/Datasets/New File/UDID%02i/.csv" % i, "a")

我更喜欢使用open,然后使用块的结尾关闭文件:

    File.open("C:/Users/hp1/Desktop/Datasets/New File/UDID%04i/.csv" % i, "a") do |logfile|
      #I'll do some processing here
    end #closes the file

警告:

我不确定,如果你真的想创建1000个日志文件(文件在循环内打开。所以每一步都创建一个文件。)。 如果是,则%04i - 版本具有以下优势:文件的位数相同(从0001开始,以1000结尾)。

答案 1 :(得分:0)

#{}只能在双引号"的字符串中使用。所以将代码更改为:

for i in 1..1000
  logfile = File.new("C:\Users\hp1\Desktop\Datasets\New File\UDID#{i}\.csv","a")
  # other stuff
end

答案 2 :(得分:0)

(1..10).each { |i| logfile = File.new("/base/path/UDID#{i}.csv") }

当您需要字符串插值时,必须使用双引号(“)。