愚蠢的问题,但我想对数据集进行一些处理并将它们放入不同的CSV中,例如UDID1.csv
,UDID2.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>'
答案 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") }
当您需要字符串插值时,必须使用双引号(“)。