如何让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
相关产品推荐
相关产品推荐

