【问题标题】:How to rename multiple files inside a loop in R如何在R中的循环内重命名多个文件
【发布时间】:2019-01-17 20:37:02
【问题描述】:

我已经下载了每个副手的一张照片。我总共有 513 张照片(但我托管了一个包含 271 张照片的文件)。每张照片都以代理人的身份命名。我想把照片的名字改成副手的名字。这意味着“66179.jpg”文件将被命名为“norma-ayub.jpg”。

我有一列包含 ID(“uri”)及其名称(“name_lower”)。我尝试使用 download.file() 的“destfile”运行代码,但它只接收一个字符串。我不知道如何使用 file.rename()。

并且 rename_r_to_R 只更改文件扩展名。

我是使用 R 的初学者。

CSV 文件: https://gist.github.com/gabrielacaesar/3648cd61a02a3e407bf29b7410b92cec

照片: https://github.com/gabrielacaesar/studyingR/blob/master/chamber-of-deputies-17jan2019-files.zip (不需要下载ZIP文件,运行下面的代码也可以得到照片,但是下载需要一些时间)

deputados <- fread("dep-legislatura56-14jan2019.csv")

i <- 1

while(i <= 514) {
  tryCatch({
    url <- deputados$uri[i]
    api_content <- rawToChar(GET(url)$content)
    pessoa_info <- jsonlite::fromJSON(api_content)
    pessoa_foto <- pessoa_info$dados$ultimoStatus$urlFoto
    download.file(pessoa_foto, basename(pessoa_foto), mode = "wb")
    Sys.sleep(0.5)
  }, error = function(e) return(NULL)
  )
  i <- i + 1
}

【问题讨论】:

  • 这是一个旁注,但你确定在 Github 上公开发布代表姓名和图片的 zip 文件是个好主意吗?
  • 请发布您正在使用的代码,并说明您获得的输出与预期输出有何不同。有关如何创建 Minimal, Complete, and Verifiable example 的详细信息,请参阅帮助中心。
  • 图片和名字来源于众议院网站
  • 不需要下载ZIP文件;运行下面的代码,你也可以得到照片,但是下载需要一些时间

标签: r data-analysis data-manipulation


【解决方案1】:

我下载了你提供的文件,直接读入R或分别解压到新文件夹:

df <- data.table::fread(
  "https://gist.githubusercontent.com/gabrielacaesar/3648cd61a02a3e407bf29b7410b92cec/raw/1d682d8fcdefce40ff95dbe57b05fa83a9c5e723/chamber-of-deputies-17jan2019", 
  sep = ",",
  header = TRUE)
download.file("https://github.com/gabrielacaesar/studyingR/raw/master/chamber-of-deputies-17jan2019-files.zip",
              destfile = "temp.zip")
dir.create("photos")
unzip("temp.zip", exdir = "photos")

然后我使用list.files 获取所有照片的文件名,将它们与数据集匹配并重命名照片。这运行速度非常快,如果重命名文件成功,最后一位将报告。

photos <- list.files(
  path = "photos", 
  recursive = TRUE,
  full.names = TRUE
)

for (p in photos) {
  id <- basename(p)
  id <- gsub(".jpg$", "", id)
  name <- df$name_lower[match(id, basename(df$uri))]
  fname <- paste0(dirname(p), "/", name, ".jpg")
  file.rename(p, fname)

# optional
  cat(
    "renaming", 
    basename(p), 
    "to", 
    name, 
    "succesful:", 
    ifelse(success, "Yes", "No"),
    "\n"
  )
}

【讨论】:

  • 谢谢!我工作!只需将“jpg”更改为“.jpg”即可。太棒了
  • 啊,是的,错字。我会在答案中更改它。很高兴我能帮上忙。
猜你喜欢
  • 2020-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 2015-10-14
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2018-08-02
相关资源
最近更新 更多