如何在Ruby中顺序创建多个CSV文件?
愚蠢的问题,但我想对数据集进行一些处理,并将它们放入不同的csv中,如如何在Ruby中顺序创建多个CSV文件?,ruby,csv,Ruby,Csv,愚蠢的问题,但我想对数据集进行一些处理,并将它们放入不同的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}部分。那么,如何克
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>'
在'initialize'中:没有这样的文件或目录@rb_sysopen-C:\Users\hp1\Desktop\Datasets\New file\udid{1}\.csv(Errno::enoint)来自C:/Ruby21/bin/hashedudo.rb:38:in'New'来自C:/Ruby21/bin/hashedudo.rb:38:in''
{}
只能在带有双引号的字符串中使用
for i in 1..1000
logfile = File.new("C:\Users\hp1\Desktop\Datasets\New File\UDID#{i}\.csv","a")
# other stuff
end
当需要字符串插值时,必须使用双引号(“) 这个
“
是一个问题,另一个问题是路径
在发布中,新文件
必须作为目录存在。此目录中必须存在另一个目录,如udid001
。这将获取一个.csv
文件
正确的是(我不使用非rubyesk for循环):
在“
内部,必须屏蔽反斜杠(\\
)。您可以使用/
:
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")
我更喜欢使用打开
,然后在块的末尾关闭文件:
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
结束)。这如何增加我现有的答案?除了{}
不是一个构造函数:)好的,那就行了!谢谢!至于我为什么需要这个,实际上我的原始问题可以在这里找到:所以,因为散列数组不能存储这么多的值,我想把我的数据集划分成更小的可管理块,对它们进行散列,将它们存储在单独的CSV文件中(这就是这个问题),&然后将其与后续哈希进行比较。如果此答案解决了您的问题,您应该接受该答案。对于彻底解决方案+1
logfile = File.new("C:/Users/hp1/Desktop/Datasets/New File/UDID%02i/.csv" % i, "a")
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