使用tidyverse库在R中批量重命名文件的技术求助
使用tidyverse批量重命名图像文件
以下是基于tidyverse生态工具的解决方案,包含文件名解析、规则匹配和批量重命名的完整流程:
1. 加载所需包
我们需要用到tidyverse(处理字符串和数据框)和fs(更友好的文件操作):
library(tidyverse) library(fs)
2. 获取目标文件并解析信息
首先定位到文件所在目录,获取所有符合原命名格式的.tif文件,同时提取文件名中的关键信息(原编号、通道):
# 设置文件所在目录(替换为你的实际路径) target_dir <- "path/to/your/files" # 获取所有符合格式的文件,并解析文件名 file_df <- dir_ls(target_dir, regexp = "^Snap-551-Image Export-(\\d{2})_c(\\d)_ORG\\.tif$") %>% tibble(file_path = .) %>% mutate( # 提取原编号(XX)和通道(cX中的数字) match_info = str_match(basename(file_path), "^Snap-551-Image Export-(\\d{2})_c(\\d)_ORG\\.tif$"), original_num = match_info[, 2], channel = match_info[, 3], # 将原编号转为数值,用于判断是否属于前20个文件 original_num_numeric = as.integer(original_num) ) %>% select(-match_info) # 移除临时匹配列
3. 生成目标文件名
根据规则生成新文件名:前20个原编号(01-20)对应的文件使用样本编号001:
file_df <- file_df %>% mutate( sample_num = if_else(original_num_numeric <= 20, "001", "001"), # 若后续有其他样本编号规则可直接修改此处 new_filename = paste0(sample_num, "_551_c", channel, "_AE2315_", original_num, ".tif"), new_file_path = path(target_dir, new_filename) )
4. 预览并执行重命名
先预览新旧文件名(确认无误再执行重命名)
print(file_df %>% select(file_path, new_file_path))
执行批量重命名
如果预览结果符合预期,运行以下代码完成重命名:
walk2(file_df$file_path, file_df$new_file_path, file_move)
关键说明
- 正则表达式
^Snap-551-Image Export-(\\d{2})_c(\\d)_ORG\\.tif$精准匹配原文件名格式,确保只处理目标文件 if_else语句控制样本编号规则,后续有其他编号需求可直接修改条件walk2函数来自purrr(tidyverse核心组件),用于批量执行文件移动/重命名操作
内容的提问来源于stack exchange,提问作者Andreas Kaineder
相关产品推荐
相关产品推荐

