![](/img/trans.png)
[英]How to use loop function to rename multiple files' name after read them in R?
[英]How to rename multiple files inside a loop in R
我为每位代表下载了一张照片。 总共有513张照片(但我托管了271张照片)。 每张照片都用副ID命名。 我想将照片名称更改为代理人的名字。 这意味着“ 66179.jpg”文件将被命名为“ norma-ayub.jpg”。
我有一列包含ID(“ uri”)及其名称(“ name_lower”)的列。 我试图用download.file()的“ destfile”运行代码,但它仅接收一个字符串。 我找不到如何使用file.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
}
我下载了您提供的文件,并将它们直接读入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"
)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.