Переименование файлов в каталоге на основе имени файла с использованием R - PullRequest
0 голосов
/ 17 октября 2018

У меня есть фрейм данных (FilesDf), содержащий каждое имя файла и подстановку, которую мне нужно сделать (FilesDf $ FileTags).

FileName                  Filename          FileTags
H:/name/+Sm,Jon.docx      +Sm,Jon.docx      RR UB AF-
H:/name/+Suth,Jane.docx   +Suth,Jane.docx   AF-
H:/name/+Dunn,Robert.docx +Dunn,Robert.docx RR LL-

Для каждого из имен файлов в этой папке мне нужно прикрепитьFileTags в качестве префикса.Имена файлов должны выглядеть следующим образом:

RR UB AF-Sm,Jon.docx      
AF-Suth,Jane.docx   
RR LL-Dunn,Robert.docx 

Моя попытка:

Filepath <- "H:/name/"
files <- list.files(Filepath,pattern = "*.doc",full.names = T) 

nrow<-nrow(FilesDf)

for(i in nrow){
sapply(files,FUN=function(eachPath){ 
   file.rename(from=eachPath,to= sub(pattern="\\+", 
   FilesDf$FileTags[i],eachPath))
})
}

Но это приводит к тому, что все файлы имеют одинаковый префикс, а не префикс, который правильно соответствуетимя файла.

1 Ответ

0 голосов
/ 17 октября 2018

Я предлагаю вам делать вещи поэтапно, частично, чтобы убедиться, что он работает правильно (тестирование), частично потому, что его легко поддерживать / расширять.

FilesDf$FileName2 <- file.path(dirname(FilesDf$FileName),
                               gsub("\\+", "", paste0(FilesDf$FileTags, FilesDf$Filename)))
FilesDf
#                    FileName          Filename  FileTags                      FileName2
# 1      H:/name/+Sm,Jon.docx      +Sm,Jon.docx RR UB AF-   H:/name/RR UB AF-Sm,Jon.docx
# 2   H:/name/+Suth,Jane.docx   +Suth,Jane.docx       AF-      H:/name/AF-Suth,Jane.docx
# 3 H:/name/+Dunn,Robert.docx +Dunn,Robert.docx    RR LL- H:/name/RR LL-Dunn,Robert.docx

Если новые имена ($FileName2) выглядятхорошо, тогда

ign <- mapply(file.rename, FilesDf$FileName, FilesDf$FileName2)

должно сработать.

(я изначально отвлекся на $FileName против $Filename и пропустил второе ...)


Данные:

FilesDf <- structure(list(FileName = c("H:/name/+Sm,Jon.docx", "H:/name/+Suth,Jane.docx", 
"H:/name/+Dunn,Robert.docx"), Filename = c("+Sm,Jon.docx", "+Suth,Jane.docx", 
"+Dunn,Robert.docx"), FileTags = c("RR UB AF-", "AF-", "RR LL-"
)), row.names = c(NA, -3L), class = c("data.frame"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...