У меня есть каталог с некоторыми PDF-файлами, и мне нужно избавиться от пробелов в этих заголовках. Итак, моей первой мыслью было установить рабочий файл прямо в соответствующее место и прочитать в каталоге:
blank <- list()
pdfs <- dir(pattern = "*.pdf")
А затем пролистайте PDF-файлы:
for(i in 1:length(pdfs)) {
gsub(" ", "-", pdfs)
}
Но этого не происходит, и у меня такое ощущение, что я делаю несколько вещей неправильно:
for
на самом деле ничего не меняет в самом каталоге, а только в списке в RБуду признателен за правильный метод! Спасибо
В любом случае петля не нужна. pdfs_nospace <- gsub(" ", "-", pdfs)
. Однако это не меняет имена файлов в каталоге. Это просто показать, что gsub
векторизован.
Если вам нужно переименовать их, и вы хотите переименовать все сразу, file.rename(from,to)
принимает векторы (одинаковой длины) для обоих аргументов. То есть вы сможете без проблем выполнять file.rename(pdfs, gsub(" ", "-", pdfs))
. Единственная неэффективность заключается в том, что я не знаю, знает ли он, что ничего не нужно делать, если нет изменений ... но, тем не менее, он работает.
Вы можете сделать что-то вроде:
# List all file paths ending in .pdf in mydir (not recursively)
fnames <- list.files(mydir, pattern = "\\.pdf$", full.names = TRUE)
# Create the new names replacing spaces to dashes in base names
newnames <- file.path(dirname(fnames), gsub(" ", "-", basename(fnames)))
# If happy with the newnames, rename
file.rename(fnames, newnames)
Сработал неплохо
Затем вам нужно переименовать файлы, вы можете использовать
file.rename()
.