通过删除和替换组件来重命名文件列表

时间:2019-04-02 16:25:57

标签: r rename

我正在尝试重命名文件夹中包含的很长的.wav文件列表。这些文件当前的名称如下:

SNR_-10_ieee21m01.wav

SNR_-10_ieee21m02.wav

SNR_-10_ieee21m03.wav ...等

我想删除'SNR_'和'ieee',并用'm'代替下划线,这样它们的含义如下:

-10_21_01.wav

-10_21_02.wav

-10_21_03.wav ....等

我首先尝试使用'file.rename'函数将'_'替换为'_',但是我什至无法正确地完成第一步-它在程序中抛出了很多'FALSE'文本。 R控制台。

startingDir <- "C:/Users/Desktop/-10"

files <- list.files(startingDir,pattern="*.wav", full.names=T)
sapply(files,FUN=function(eachPath){
  file.rename(from=eachPath,to=sub(pattern="m",replacement="_",eachPath))
})

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式捕获3个感兴趣的数字,并使用它们创建新的文件名。

这是它的样子:

# Your strings
str <- c("SNR_-10_ieee21m01.wav", "SNR_-10_ieee21m02.wav")

# Note the parenthesis to capture the 3 groups
# and the use of \\1, \\2 and \\3 to insert them in the replacement
fixed_str <- gsub(
   pattern = "SNR_(\\-?[0-9]+)_ieee([0-9]+)m([0-9]+)\\.wav$",
   replacement = "\\1_\\2_\\3.wav", 
   str)

编辑:现在第一组捕获(可选)减号。

然后将其应用于您的文件。您可以使用apply很好,但是我只喜欢purrr包,它提供了各种地图功能。 walkmap相似,但没有捕获结果。运行函数会产生副作用,例如rename_file

rename_file <- function(fi) {
  new_fi <- gsub(pattern = "SNR_(\\-?[0-9]+)_ieee([0-9]+)m([0-9]+)\\.wav$", 
                   replacement = "\\1_\\2_\\3.wav",
                   fi)
  file.rename(from = fi, to = new_fi)
}

library("purrr")
walk(files, rename_file)