我有一个包含+100 PDF文件的文件夹,每个文件都有一个名字。我还有csv文件,其中包含PDF的匹配名称和另一个具有数字ID号的列。我想要做的是在R中导入所有这些,并添加基于匹配名称(来自文件)的数字ID,并最终使用该新名称导出它们。
我对如何使用csv或txt文件有一个很好的想法,但我不知道如何处理PDF。有人可以帮我一把。
这是我尝试做什么......
# Required libraries
library(tm)
# Folder with csv file
setwd("/Users/Home/Desktop/Andrea")
wd <- getwd()
setwd(wd)
# Import CSV file
db <- read.csv("Lista de referencia.csv", header = T, sep = ",")
head(db)
# Folder with the PDF files
setwd("/Users/Home/Desktop/Andrea/Para renombrar")
wd1 <- getwd()
setwd(wd1)
# Import PDF files
files <- list.files(pattern = "\\.pdf$")
DF <- NULL
for (i in 1:length(files)) {
dat <- readPDF(files[i])
}
答案 0 :(得分:1)
由于只是重命名pdf文件,我们实际上不必阅读它们 - 只需使用file.rename
。
1)为了使代码保持在自包含状态而不实际使用任何文件,我们已将file.rename
行注释掉。您可以在运行代码之前取消注释该行,或者将cat
输出重定向到文件,然后将该文件导入R。
# test inputs
db <- data.frame(id = 1:2, name = c("a.pdf", "b.pdf"))
files <- db$name
for(fn in files) {
i <- match(fn, db$name, nomatch = 0)
if (i > 0) {
new_name <- sprintf("%s.%d.pdf", sub(".pdf$", "", fn), db$id[i])
cat("file.rename('", fn, "', '", new_name, "')\n", sep = "")
# file.rename(fn, new_name)
} else warning(fn, " was not renamed as it was not found in db")
}
,并提供:
file.rename('a.pdf', 'a.1.pdf')
file.rename('b.pdf', 'b.2.pdf')
2)或者,我们可以使用这种矢量化方法:
not_found <- setdiff(files, db$name)
if (length(not_found) > 0)
warning("These files were not found in db:", toString(not_found))
found <- intersect(files, db$name)
new_names <- sprintf("%s.%d.pdf", sub(".pdf$", "", found), db$id[match(found, db$name)])
# file.rename(found, new_names)