如何在Ruby中从文件路径提取各级父文件夹名称
Ruby 提取文件路径中所有上层文件夹名称的实现方案
方案1:使用Pathname标准库(推荐,跨平台适配性强、可读性高)
直接调用Ruby内置的Pathname标准库即可实现层级遍历,无需自己处理路径分隔符适配问题:
require 'pathname' # 示例路径 file_path = "E:/aaa/bbb/ccc/filename.jpg" path_obj = Pathname.new(file_path) folder_names = [] # 从文件所属的最内层父目录开始逐层向上遍历 path_obj.parent.ascend do |current_dir| # 遍历到根目录(Windows的盘符、Unix的/)时终止 break if current_dir.root? folder_names << current_dir.basename.to_s end # 此时folder_names默认顺序为从内到外:["ccc", "bbb", "aaa"] # 如果需要从上层到下层的顺序,反转数组即可 folder_names = folder_names.reverse # 输出 ["aaa", "bbb", "ccc"]
方案2:使用File原生方法,无需引入额外依赖
如果不想引入标准库,也可以用File类自带的路径拆分方法实现:
file_path = "E:/aaa/bbb/ccc/filename.jpg" # 先排除文件名,拿到完整目录路径 dir_path = File.dirname(file_path) folder_names = [] loop do # 拆分当前目录为「上层目录路径」和「当前层目录名」两部分 upper_dir, current_folder = File.split(dir_path) # 遍历到根目录时终止循环 break if upper_dir == dir_path folder_names << current_folder dir_path = upper_dir end # 按需调整顺序 folder_names = folder_names.reverse # 输出 ["aaa", "bbb", "ccc"]
补充说明
- 两种方案都自动适配Windows、Unix/Linux、macOS的路径分隔符,相对路径也可以正常处理
- 如果你需要提取指定层级的文件夹,直接取数组对应索引即可,比如最内层父文件夹ccc对应
folder_names[-1],和你之前用方法获取的结果一致
内容的提问来源于stack exchange,提问作者rency0722
相关产品推荐
相关产品推荐

