如何使用R删除多个文件的文件名的一部分

时间:2018-08-03 15:07:02

标签: r rename

我正在Windows上使用R Studio 3.4.4

我的文件名是这样的:

1-2.edit-sites.annot.xlsx
2-1.edit-sites.annot.xlsx
...
10-1.edit-sites.annot.xlsx

我正在使用以下代码重命名文件(依次包括1,2,3 ... 10,11等)

file.rename(mixedsort(sort(list.files(pattern="*edit-sites.annot.xlsx"))), paste0("Sample ", 1:30))

但是我永远不能删除edit-sites.annot部分。似乎.在编辑之前使R弄乱了文件的扩展名!当我使用上面的代码时,我得到Sample 1.edit-sites.annot.xlsx,但我想要Sample 1.xlsx

1 个答案:

答案 0 :(得分:0)

这应该有效。对于每个名为“ [num1]-[num2] .edit-sites.annot.xlsx”的文件,它将其重命名为“ Sample [num1]-[num2] .xlsx”:

fnames <- dir(path = choose.dir(), pattern = '.*edit-sites.annot.xlsx')

> fnames
[1] "1-2.edit-sites.annot.xlsx"  "10-2.edit-sites.annot.xlsx" "11-2.edit-sites.annot.xlsx" "21-2.edit-sites.annot.xlsx"
[5] "31-2.edit-sites.annot.xlsx" "4-2.edit-sites.annot.xlsx" 

ptrn <- '^([[:digit:]]{1,3}-[[:digit:]]{1,3}).*xlsx'
ptrn2 <- '(.*).edit-sites.annot.xlsx'

lapply(fnames, function(z){
  suffix <- regmatches(x = z, m = regexec(pattern = ptrn, text = z))[[1]][2] # ptrn2 also works 
  file.rename(from = z, to = paste('Sample', " ", suffix, ".xlsx", sep = ""))
})

运行代码后:

> dir(pattern = '.*xlsx')
[1] "Sample  1-2.xlsx"  "Sample  10-2.xlsx" "Sample  11-2.xlsx" "Sample  21-2.xlsx" "Sample  31-2.xlsx"
[6] "Sample  4-2.xlsx"

ptrnptrn2基于您提供的示例文件名。由于我不确定文件名是否始终与提供的模式一致,因此我添加了regex模式以匹配以短划线分隔的前导数字。

我倾向于批量重命名文件(与此处的示例相同),并在我的代码中包含一些打印语句(使用cat),以显示原始名称以及将其更改为:

lapply(fnames, function(z){
  suffix <- regmatches(x = z, 
                       m = regexec(pattern = ptrn, text = z))[[1]][2] # ptrn2 also works 
  new_name <- paste('Sample', " ", suffix, ".xlsx")
  cat('Original file name: ')
  cat(z)
  cat("\n")
  cat('Renamed to: ')
  cat(new_name)
  cat("\n")

  file.rename(from = z, to = new_name)
})