如何在R中基于DataFrame匹配值批量重命名本地文件
R语言实现文件名匹配数据框值并重命名方案
首先你需要先构造文件名和salary的映射关系,再执行批量重命名,完整实现代码如下:
library(data.table) # 第一步:构造匹配映射表 # 去掉employee列的空格,生成和无空格文件名对应的匹配键 df1[, match_name := gsub("\\s", "", employee)] # 生成命名映射:键为匹配用的无空格姓名,值为对应salary rename_map <- setNames(as.character(df1$salary), df1$match_name) # 第二步:批量读取文件并重命名 # 替换为你的目标文件所在文件夹路径 target_dir <- "./" # 读取目录下所有文件,如需限定仅处理txt文件,可添加参数 pattern = "\\.txt$" file_list <- list.files(path = target_dir, full.names = F) for (old_file in file_list) { # 提取无后缀的文件名用于匹配 file_base <- tools::file_path_sans_ext(old_file) if (file_base %in% names(rename_map)) { # 保留原文件后缀(无后缀则直接用salary作为文件名) file_suffix <- tools::file_ext(old_file) new_file <- ifelse(file_suffix == "", rename_map[file_base], paste0(rename_map[file_base], ".", file_suffix)) # 执行重命名 file.rename( from = file.path(target_dir, old_file), to = file.path(target_dir, new_file) ) } }
注意事项
- 重命名前可先注释掉
file.rename代码段,添加print(paste(old_file, "->", new_file))核对匹配结果,确认无误后再执行重命名避免误操作 - 如果你的文件存放在多层子目录下,可在
list.files中添加参数recursive = T遍历所有子目录的文件 - 代码默认保留原文件后缀,若不需要保留直接去掉后缀拼接逻辑即可
内容的提问来源于stack exchange,提问作者SUMIT
相关产品推荐
相关产品推荐

