【问题标题】:How to delete part of a filename for multiple files using R如何使用 R 删除多个文件的部分文件名
【发布时间】:2018-08-03 23:39:26
【问题描述】:

我在 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

【问题讨论】:

    标签: r rename


    【解决方案1】:

    这应该有效。对于每个名为“[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)
    })
    

    【讨论】:

    • 非常感谢!这正是我所需要的。它似乎比我想象的更复杂
    • 很高兴我能帮上忙。如果答案符合您的需求,请考虑为可能有相同问题的其他用户接受或投票。
    • 遗憾的是,我没有足够的声誉来支持您的回答:(
    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 2012-08-23
    • 2020-02-11
    • 1970-01-01
    • 2023-04-01
    • 2017-04-08
    • 2020-02-15
    • 2017-12-23
    相关资源
    最近更新 更多