r将文件夹中的文件从xlsx重命名为csv

时间:2017-09-14 01:01:59

标签: r regex

我搜索并找到了东西,但仍有问题。

我在目录中有文件"结果(1).xlsx"和"结果(2).xlsx"。我想将它们更改为" new1.csv"和" new2.csv"等等。

我使用以下内容并且它无法正常工作(问题似乎是正则表达式...而且我只是在使用file.rename和sapply之间翻转):

folder = "r:\\files"
files <- list.files(folder,pattern = "*.xlsx",full.names = T) 

sapply(files,FUN=function(eachPath){ 
    file.rename(from=eachPath,to= sub(pattern="result\\s(*).xlsx", 
paste0("new.csv"),eachPath))
})

由于

2 个答案:

答案 0 :(得分:2)

在回答这个问题之前,我想提一下,在计算机科学中,更改文件的扩展名并不会自动更改文件格式。换句话说,将.xlsx更改为.csv以将其转换为csv并不是你想要的。

相反,我建议使用 readxl 包将xlsx文件读入R.然后在R中,如果仍然需要,可以将表保存为csv。有很多方法可以做到这一点,这里有一个:

install.packages("readxl")

library(readxl)

df <- read_excel("yourData.xlsx")

#optional save/convert as csv
write.csv(df,"yourData.csv",row.names=FALSE)

如果您想了解更多有关如何在一系列文件中更快地执行此操作的信息,请查看此SO question on the topic的答案。

答案 1 :(得分:1)

改为使用

sapply(1:length(files),FUN=function(x){ 
     file.rename(from=files[x], to=paste0("new",x,".csv"))
})

如果您仍想使用正则表达式,请尝试使用

sapply(files,FUN=function(eachPath){ 
     file.rename(from=eachPath, to=gsub(".+\\((\\d)\\)", "new\\1", eachPath))
})

如果您想更改文件格式而不是文件名,请查看readxl并使用write.csv输出