Распределение файлов по папкам по указанному пути в R - PullRequest
0 голосов
/ 31 октября 2019

У меня есть CSV-файл, который указывает пути к файлам jpg в их папках. В столбцах указаны имена папок, в которые необходимо скопировать jpg, а в строках есть пути к jpg в их исходной папке (из которой он должен быть скопирован). Совместное использование примера с помощью dput ()

    mydata=structure(list(x1 = structure(c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 1L, 1L), 
    .Label = c("", "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\17992279.png", "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44245909_10_173_201907311705.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44253326_03_61_201907311507.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44249755_10_191_201907311444.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44253009_10_935_201907311358.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44254483_01_241_201907311457.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44537611_10_71_201908281506.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44548452_10_973_201908291551.jpg"), 

    class = "factor"), x2 = structure(c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 1L, 1L), 
    .Label = c("", "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44243943_10_916_201907311338.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44245909_10_173_201907311705.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44299011_10_52_201908281735.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44305733_10_845_201908261634.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44249755_10_191_201907311444.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44254483_01_241_201907311457.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44537550_10_155_201908310857.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\DKRBP18729589_08_881_201907311205.jpg"), 

    class = "factor"), x3 = structure(1:11, .Label = c("C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44243943_10_916_201907311338.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44245909_10_173_201907311705.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44265269_10_52_201908280944.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44299011_10_52_201908281735.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44305733_10_845_201908261634.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCI44540448_10_973_201908291524.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44249755_10_191_201907311444.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44254483_01_241_201907311457.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44537550_10_155_201908310857.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\CCSRBP44537577_10_890_201908271624.jpg", 
    "C:\\Users\\OCR\\Downloads\\OCR pass 2\\input\\DKRBP18729589_08_881_201907311205.jpg"), 
    class = "factor")), .Names = c("x1", "x2", "x3"), class = "data.frame", row.names = c(NA, 
    -11L))

Итак, все пути к файлам jpg, указанные в столбце x1, должны быть скопированы в C:\\X1\, а все пути к файлам jpg, указанные в x2столбец должен быть скопирован в C:\\X2\.

Все пути файлов jpg, указанные в столбце x3, должны быть скопированы в C:\\X3\.

Как это сделать, через R?

1 Ответ

1 голос
/ 31 октября 2019

max,

похоже, что когда вы читаете в CSV, вы не ставите опцию stringsAsFactors=FALSE, которая приводит к проблемам с функциями после.

Вымогу конвертировать x1 и т. д. через

mydata=mydata %>% mutate_all(na_if,"") #sets the empty entries to NA
mydata=lapply(mydata, as.character) #sets all to character
mydata=lapply(mydata, na.exclude) #removes the NAs, empty elements would throw errors.

file.copy(from=mydata$x1,to=file.path("C:/X1",basename(mydata$x1)))}) #copies for the first "column".

Я никогда не делаю такие вещи, как копирование с lapply, потому что если кто-то сделает это неправильно, он может запутаться. В зависимости от размера вашего фрейма данных, вы можете попытаться сделать это тоже. Но я рекомендую просто переписать последнюю строку, что также даст вам больше контроля над тем, куда идут файлы.

file.copy(from=mydata$x2,to=file.path("C:/X2",basename(mydata$x2)))})
file.copy(from=mydata$x3,to=file.path("C:/X3",basename(mydata$x3)))})

Примечание: в R гораздо удобнее использовать / в качестве разделителей в путях к файлам, это также работает на окнах.

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