我有一个接受文件夹路径的方法,我希望得到所有扩展名为“.yml”的文件名,并将它们添加到对象的哈希中,如下所示:
如果文件名是 saved_file_1.yml - > {saved_file_1 => "saved_file_1.yml"}
答案 0 :(得分:2)
使用Dir::glob
方法,如下所示
Dir.glob("#{path}/*.yml").each_with_object({}) do |filename,hsh|
hsh[File.basename(filename,'.yml')] = filename
end
答案 1 :(得分:0)
hash = {}
Dir["#{path}/*.yml"].each { |f| hash[File.basename(f,'.yml')] = f }
答案 2 :(得分:0)
要获取匹配文件列表,请使用Dir.glob
获取目录中的文件列表,并使用File.extname
获取扩展名称
Dir.glob(path_to_folder).select { |file| File.extname(file) == ".yml" }
要将它们转换为您问题中的哈希值,请使用File.basename
获取不带扩展名的文件名,并使用Enumerable#each_with_object
创建哈希对象
Dir.glob(path_to_folder).each_with_object({}) { |file, hash| hash[File.basename(file, ".yml")] = file }
答案 3 :(得分:0)
另一种方式:
Hash[(d = Dir["#{path}/*.yml"]).map { |f| File.basename(f,".yml") }.zip(d)]