通过提取文件名和扩展名的第一部分来重命名文件夹中的文件(R编程)

时间:2018-10-13 22:16:54

标签: r

我有数百个文件,其中包含Yahoo finance API的数据。

它们以以下形式命名:

R> print(list.files())
  [1] "A_yahoo_2017-10-14_2018-10-14.csv"
  [2] "AAL_yahoo_2017-10-14_2018-10-14.csv"
  [3] "AAP_yahoo_2017-10-14_2018-10-14.csv"  

我想删除代码(symbol)之后的名称并保留扩展名。

例如:

[2] "AAL_yahoo_2017-10-14_2018-10-14.csv"

成为

[2] "AAL.csv"

我决定删除扩展名,拆分文件的整个名称,使用代码,然后再次添加扩展名(我知道这很麻烦)。像这样:

library(tools)
oldnames = list.files()
oldnames = tools::file_path_sans_ext(oldnames)
oldnames = strsplit(oldnames, "_")

哪个会产生这样的内容(示例)

print(oldnames)
.
.
[[173]]
[1] "EXC"        "yahoo"      "2017-10-14" "2018-10-14"
.
.

如您所见,股票代码在[1]。我不确定下一步如何重命名文件夹中的整个文件,或者不确定是否有更简化的方法。

1 个答案:

答案 0 :(得分:1)

设置测试用例

fn <- c("A_yahoo_2017-10-14_2018-10-14.csv"
, "AAL_yahoo_2017-10-14_2018-10-14.csv"
, "AAP_yahoo_2017-10-14_2018-10-14.csv")  

解决方案

firstpart <- sapply(strsplit(fn,"_"), "[[",1)
mapply(file.rename, from=fn, to=paste0(firstpart, ".csv"))

但是您必须确保第一部分是唯一的,即只有一个文件名以AAL,AAP等开头。