0

我正在使用 ruby​​ Dir 方法来获取目录中的所有文件名。像这样:

 dir_files = Dir["/Users/AM/Desktop/07/week1/dailies/regionals/*.csv"]

这给了我一个包含下面列出的每个元素的数组:

 /Users/AM/Desktop/07/week1/dailies/regionals/ch002.csv
 /Users/AM/Desktop/07/week1/dailies/regionals/ch014.csv
 /Users/AM/Desktop/07/week1/dailies/regionals/ch90.csv
 /Users/AM/Desktop/07/week1/dailies/regionals/ch112.csv
 /Users/AM/Desktop/07/week1/dailies/regionals/ch234.csv

我试图仅提取上述字符串中匹配的部分:“regionals/*.csv”

我如何在 Ruby 中做到这一点?

以下没有工作

@files_array.each do |f|
     f = f.split("/").match(/*.csv/)
    i = f.include?(".csv")
    puts "#{i.inspect}"

    #self.process_file(f[i])
 end

这样做的聪明方法是什么?我打算将每个文件名的返回字符串传递给辅助方法进行处理。但正如您所见,所有 csv 文件与我的执行脚本位于不同的目录中。我执行此操作的脚本位于

 /Users/AM/Desktop/07/week1/dailies/myScript.rb

谢谢

4

2 回答 2

3

无论文件模式如何,这将始终回发最终目录和文件名:

@files_array.map { |f| f.split("/")[-2..-1].join("/") }
#=> ["regionals/ch002.csv", "regionals/ch014.csv", "regionals/ch90.csv", "regionals/ch112.csv", "regionals/ch234.csv"]
于 2013-07-27T15:11:41.493 回答
1

这为您提供了所需的值:)

dir_files.map {|path| path[/regionals\/.*.csv/]}
#=> ["regionals/ch002.csv", "regionals/ch014.csv", "regionals/ch90.csv", "regionals/ch112.csv", "regionals/ch234.csv"]
于 2013-07-27T15:03:38.390 回答