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

如何让R自动加载文件夹中带时间戳的最新版本文件?

自动加载带时间戳的最新Excel文件(R语言)

问题背景

我用R导出文件时会给文件名加上时间戳,示例代码如下:

library(readxl)

mtcars2 <- mtcars
mtcars2$carb <- NULL

timestamp <- format(Sys.time(), "%d %m %Y %Hh")
timestamp <- gsub(" ", "_", timestamp)
write_xlsx(mtcars, path = paste0(path_in, "mtcars_timestamp_", timestamp, ".xlsx"), col_names = TRUE)
write_xlsx(mtcars2, path = paste0(path_in, "mtcars_timestamp_", timestamp, ".xlsx"), col_names = TRUE)
timestamp <- "07_12_2022_11h"
write_xlsx(mtcars, path = paste0(path_in, "mtcars_timestamp_", timestamp, ".xlsx"), col_names = TRUE)
timestamp <- "06_12_2022_13h"
write_xlsx(mtcars2, path = paste0(path_in, "mtcars2_timestamp_", timestamp, ".xlsx"), col_names = TRUE)

但这种方式的问题是加载文件时必须手动更新文件名,我想让R自动加载每个文件的最新版本,期望实现类似这样的效果:

mtcars2 <- read_xlsx("mtcars2_timestamp_06_12_2022_10h.xlsx")
mtcars <- read_xlsx("mtcars_timestamp_07_12_2022_11h.xlsx")

解决方案

方法1:基于文件名中的时间戳排序

利用已有的命名规则,提取文件名里的时间戳并排序,直接获取最新的文件路径:

library(readxl)

# 定义通用函数:获取指定前缀的最新文件路径
get_latest_file <- function(file_prefix, dir_path = ".") {
  # 筛选目录下符合前缀和时间戳规则的Excel文件
  file_list <- list.files(
    path = dir_path,
    pattern = paste0("^", file_prefix, "_timestamp_.*\\.xlsx$"),
    full.names = TRUE
  )
  
  # 提取文件名中的时间戳字符串,转换为可排序的时间格式
  timestamp_strs <- sub(paste0("^", file_prefix, "_timestamp_(.*)\\.xlsx$"), "\\1", basename(file_list))
  timestamps <- as.POSIXct(timestamp_strs, format = "%d_%m_%Y_%Hh")
  
  # 按时间戳降序排列,取第一个即为最新文件
  latest_file <- file_list[order(timestamps, decreasing = TRUE)[1]]
  return(latest_file)
}

# 替换为你的实际文件目录
path_in <- "你的文件存放路径"

# 自动加载最新版本
mtcars <- read_xlsx(get_latest_file("mtcars", path_in))
mtcars2 <- read_xlsx(get_latest_file("mtcars2", path_in))

方法2:基于文件修改时间排序

如果文件名的时间戳和文件实际修改时间一致,也可以直接通过文件修改时间判断:

library(readxl)

get_latest_file_by_mtime <- function(file_prefix, dir_path = ".") {
  file_list <- list.files(
    path = dir_path,
    pattern = paste0("^", file_prefix, "_timestamp_.*\\.xlsx$"),
    full.names = TRUE
  )
  
  # 获取文件修改时间并排序
  file_mtimes <- file.mtime(file_list)
  latest_file <- file_list[order(file_mtimes, decreasing = TRUE)[1]]
  return(latest_file)
}

# 使用示例
mtcars <- read_xlsx(get_latest_file_by_mtime("mtcars", path_in))
mtcars2 <- read_xlsx(get_latest_file_by_mtime("mtcars2", path_in))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:10:12