r - 如何在R中的循环内重命名多个文件
问题描述
我已经下载了每个副手的一张照片。我总共有 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
}
解决方案
我下载了您提供的文件,并分别将它们读入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"
)
}
推荐阅读
- javascript - Javascript 不会设置在 XHR 响应中收到的 httpcookie
- python - 为什么使用 rpy2 时在 Mac 中不能正确显示绘图?
- android - 有没有办法同时使用limitToLast和limitToFirst?
- excel - CreateObject(“System.Text.StringBuilder”)的VBA自动化错误
- mysql - 使用group_concat后如何计算由','分隔的列的长度
- sql - 子查询需要 67 秒处理,使用临时表是瞬时的
- python - 带参数的类的代码组织和实例
- r - 重新排序相关矩阵图的轴标签
- c++ - decltype 未在此范围内声明
- python - 连接两个数据框时出现奇怪的python数据框尺寸问题