我正在尝试重命名文件夹中包含的很长的.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))
})
任何帮助将不胜感激。
答案 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
包,它提供了各种地图功能。 walk
与map
相似,但没有捕获结果。运行函数会产生副作用,例如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)