Как удалить определенные файлы из папки, имена которых не совпадают, из столбца df в R - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь удалить определенные файлы из папки.

В этой папке около 400 файлов (в основном это файлы WAVE, но также пара текстовых файлов).

У меня есть фрейм данных с колонкой, в которой перечислены все файлы, которые мне нужно сохранить. Нет реального образца того, как они названы. Вот пример того, как это выглядит.

df<- data.frame(A = c("12947_94", "908908_83","383","map_1","map_2","map_4","testing2.d"))

Я хочу удалить из этой папки все файлы, которые НЕ соответствуют именам файлов из столбца в моем фрейме данных.

Я успешно удалил ВСЕ файлы в папке таким образом

files <- list.files(paste("C:/Users..."))

do.call(unlink,list(list.files("C:/Users...",full.names=T)))

но не знаю, как изменить или настроить этот код для удаления только тех файлов, которые не соответствуют именам в моем столбце данных.

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вот решение. Если в df $ A есть файлы с более чем одним периодом, я не знаю, насколько хорошо они будут работать.

df<- data.frame(A = c("12947_94", "908908_83","383","map_1","map_2","map_4","testing2.d"))
files <- c("12947_94.wav", "908908_83.txt", "383.txt", "map_1.bmp", "map_2.bmp", "map_4.pdf", "testing2.d.wmf", 'map5.png')

short_files <- gsub('\\.([^:]+)$', '', files)
drop_files <- files[!short_files %in% gsub('\\.([^:]+)$', '', df$A)]

unlink(file.path('C:/users', drop_files))
0 голосов
/ 09 января 2019

Я не уверен, почему вы хотите сохранить имена файлов в кадре данных, а не в векторе. Давайте предположим, что ваши имена файлов правильные, а также C:/Users... означает, что вы подставили его, но он существует. Один из способов сделать это будет:

files.in.dir <- list.files(paste("C:/Users..."), full.names = T)
files.to.keep <- c("12947_94", "908908_83","383","map_1","map_2","map_4","testing2.d")
files.to.remove <- list(files.in.dir[!(files.in.dir %in% grep(paste(files.to.keep,collapse = "|"), files.in.dir, value=TRUE))])
do.call(unlink, files.to.remove)
Я использовал эти 4 шага для краткости. `grep (paste (files.to.keep, collapse =" | ")` означает создание шаблона, который соответствует любому из файлов в списке `files.to.keep`.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...