我正在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
答案 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"
ptrn
和ptrn2
基于您提供的示例文件名。由于我不确定文件名是否始终与提供的模式一致,因此我添加了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)
})