You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用purrr迭代文件目录列表 查找存在目标文件的最新子文件夹路径

代码修改实现方案

实现思路

核心逻辑是把所有年月目录按时间从新到旧排序,遍历校验每个目录下是否存在目标Excel文件,返回第一个符合要求的目录即可读取文件,用purrr的detect()函数可以非常便捷的实现该遍历逻辑,无需手写循环。

依赖包说明

需要提前加载以下包:

library(fs)
library(stringr)
library(purrr)
library(readxl)

完整修改后代码

# 工作簿根路径
workbook_dir <- "Z:/Ac/Iron/STAR"
# 目标文件的相对路径(固定部分)
target_file_suffix <- file.path("Working", "Group Workbook Log.xlsx")

# 1. 提取所有年份目录,按年份倒序排列(最新的年份在前)
year_dirs <- dir_ls(workbook_dir, type = "directory")
year_nums <- str_extract(year_dirs, "\\d{4}(?=/?)") %>% as.numeric()
sorted_year_dirs <- year_dirs[order(-year_nums)]

# 2. 对每个年份下的月份目录按月份倒序排列,拼接为全局倒序的年月目录列表
sorted_month_dirs <- map(sorted_year_dirs, function(yd) {
  month_dirs <- dir_ls(yd, type = "directory")
  month_nums <- str_extract(month_dirs, "\\d{2}(?=/?)") %>% as.numeric()
  month_dirs[order(-month_nums)]
}) %>% flatten_chr()

# 3. 定义校验函数:判断某月份目录下是否存在目标文件
has_target_file <- function(md) {
  file_exists(file.path(md, target_file_suffix))
}

# 4. 遍历查找第一个存在目标文件的月份目录
valid_month_dir <- detect(sorted_month_dirs, has_target_file)

# 5. 校验结果并读取文件
if (is.null(valid_month_dir)) {
  stop("所有年月目录下均未找到目标Excel文件,请检查根路径配置")
} else {
  file <- read_excel(file.path(valid_month_dir, target_file_suffix))
}

关键逻辑说明

  • 排序阶段统一按降序排列,确保遍历顺序永远是先查最新的年月,找到第一个符合要求的就终止,性能最优
  • detect()函数默认返回第一个满足条件的元素,完全匹配需求,不需要额外处理遍历终止逻辑
  • 增加了全局无匹配文件的报错提示,比原生的文件不存在报错更易定位问题
  • 路径操作全部用fs包的函数,自动适配不同操作系统的路径分隔符,兼容性更好

内容的提问来源于stack exchange,提问作者Jazzmatazz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:45:08