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

如何用R脚本将文件批量重命名为CSV中ID列的名称

批量重命名下载文件的R脚本实现

我通过R脚本从包含下载链接的CSV文件批量下载文件,但下载后的文件名默认取自CSV中external列的末尾部分(比如示例中的12345_download),而我需要将这些文件重命名为对应行的ID列名称(比如ABC_101)。由于涉及超过1000个文件,需要编写脚本自动匹配对应关系并完成重命名。

数据示例

IDexternal
ABC_101https://peaches.com/12345_download
ABC_102https://peaches.com/123456_download

完整实现脚本

基于你已编写的代码,补充完成重命名逻辑的完整脚本如下:

library(dplyr)
library(stringdist)
library(writexl)
library(purrr)

# 设置项目工作目录
setwd("/home2/peach/")

# 获取下载文件夹中所有jpg文件的完整路径
file_names <- list.files(path = "peaches_downloads/downloads/",
                         all.files = TRUE, 
                         full.names = TRUE,
                         recursive = TRUE,
                         pattern = ".jpg") %>%
  data.frame(paths = .)

# 提取文件名中用于匹配的核心标识(去掉路径、.jpg后缀和_download标识)
file_names <- file_names %>%
  mutate(
    match.name = basename(paths) %>%
      gsub(pattern = "\\.jpg.*", replacement = "") %>%
      gsub(pattern = "_download", replacement = "")
  )

# 读取包含ID与对应链接的CSV文件
name_data <- read.csv("peaches_downloads/xlsx/fruit_full_dump_.csv")

# 从external列提取用于匹配的核心标识,与文件的match.name对应
name_data <- name_data %>%
  mutate(
    external_match = basename(external) %>%
      gsub(pattern = "_download", replacement = "")
  )

# 合并文件路径与对应ID,生成重命名映射表
rename_mapping <- file_names %>%
  left_join(name_data %>% select(ID, external_match), 
            by = c("match.name" = "external_match"))

# 检查是否存在匹配失败的文件
missing_matches <- rename_mapping %>% filter(is.na(ID))
if(nrow(missing_matches) > 0) {
  cat("以下文件未找到对应ID,跳过重命名:\n")
  print(missing_matches$paths)
}

# 对匹配成功的文件执行批量重命名
rename_mapping %>%
  filter(!is.na(ID)) %>%
  rowwise() %>%
  mutate(
    new_path = file.path(dirname(paths), paste0(ID, ".jpg"))
  ) %>%
  ungroup() %>%
  walk(~ file.rename(from = .x$paths, to = .x$new_path))

cat("重命名操作完成!")

关键步骤说明

  • 提取匹配标识:分别从文件路径和CSV的external链接中剥离出核心匹配字段(如示例中的12345),确保两者可以精准对应。
  • 生成映射表:通过left_join将文件路径与目标ID关联,形成清晰的重命名对应关系。
  • 前置校验:提前排查匹配失败的文件,避免无效操作或错误覆盖。
  • 批量重命名:使用purrr::walk遍历映射表,调用file.rename完成重命名,同时保留原文件的目录结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:30:52