0

Let's have a list of images:

destination <- "C:/Users/uzytkownik/Pictures/image/"
myfiles_jpg <- list.files(path = destination, pattern = "jpg",  full.names = TRUE)
### let's see
head(myfiles_jpg)
[1] "C:/Users/uzytkownik/Pictures/image/1.jpg"    "C:/Users/uzytkownik/Pictures/image/10.jpg"  
[3] "C:/Users/uzytkownik/Pictures/image/100.jpg"  "C:/Users/uzytkownik/Pictures/image/1000.jpg"
[5] "C:/Users/uzytkownik/Pictures/image/1001.jpg" "C:/Users/uzytkownik/Pictures/image/1002.jpg"
### How many?
length(myfiles_jpg)
[1] 2920

I want to convert names of the images to four-digit format, for instance

"C:/Users/uzytkownik/Pictures/image/1.jpg" 

to

"C:/Users/uzytkownik/Pictures/image/0001.jpg" 

Any suggestions?

Mikołaj
  • 385
  • 4
  • 17

1 Answers1

1

As an example we will use the filenames in a list:

library(stringr)

myfiles <- list("C:/Users/uzytkownik/Pictures/image/1.jpg","C:/Users/uzytkownik/Pictures/image/100.jpg","C:/Users/uzytkownik/Pictures/image/1001.jpg")

myfiles_new <- list()

for(i in 1:length(myfiles)){
  index <- regmatches(myfiles[[i]], gregexpr("(?<=image\\/)[0-9]+", myfiles[i], perl=TRUE))
  replacement <- str_pad(string = index, width = 4, side = "left", pad = 0)
  myfiles_new[[i]] <- sub('(?<=image\\/)[0-9]+', replacement, myfiles[i], perl = TRUE)
}

myfiles_new
[[1]]
[1] "C:/Users/uzytkownik/Pictures/image/0001.jpg"

[[2]]
[1] "C:/Users/uzytkownik/Pictures/image/0100.jpg"

[[3]]
[1] "C:/Users/uzytkownik/Pictures/image/1001.jpg"

Then using somthing similar to what was found here we should be able to rename the files:

sapply(myfiles_jpg,FUN=function(eachPath){ 
file.rename(from=eachPath,to=myfiles_new, eachPath))
})
Mako212
  • 6,787
  • 1
  • 18
  • 37
Chabo
  • 2,842
  • 3
  • 17
  • 32