我如何在ruby中写一个循环,以便我可以在每个文件上执行一个代码块?
我是ruby的新手,我已经得出结论,做到这一点的方法是一个do each循环。 ruby文件将在不同于我想要循环的目录的目录中执行。
我已经试过了。foreach,我不能让它工作。
我如何在ruby中写一个循环,以便我可以在每个文件上执行一个代码块?
我是ruby的新手,我已经得出结论,做到这一点的方法是一个do each循环。 ruby文件将在不同于我想要循环的目录的目录中执行。
我已经试过了。foreach,我不能让它工作。
当前回答
这是我最喜欢的易于阅读的方法:
Dir.glob("*/*.txt") do |my_text_file|
puts "working on: #{my_text_file}..."
end
你甚至可以将它扩展到subdirs中的所有文件:
Dir.glob("**/*.txt") do |my_text_file| # note one extra "*"
puts "working on: #{my_text_file}..."
end
其他回答
跳过。& . .,您可以使用Dir::each_child。
Dir.each_child('/path/to/dir') do |filename|
puts filename
end
Dir::children返回一个文件名数组。
我喜欢上面没有提到的这个。
require 'pathname'
Pathname.new('/my/dir').children.each do |path|
puts path
end
这样做的好处是,您得到的是一个Pathname对象,而不是一个字符串,您可以用它做一些有用的事情,并进一步遍历。
find库是专门为这个任务设计的: https://ruby-doc.org/stdlib-2.5.1/libdoc/find/rdoc/Find.html
require 'find'
Find.find(path) do |file|
# process
end
这是一个标准的ruby库,所以应该是可用的
Dir.foreach("/home/mydir") do |fname|
puts fname
end
Dir也有更短的语法,从目录中获取所有文件的数组:
Dir['dir/to/files/*'].each do |fname|
# do something with fname
end