使用正则表达式查找来自不同文件夹的多个文件

时间:2012-12-12 09:44:37

标签: regex r file-upload

我正在尝试从不同的文件夹中加载R中的多个.txt文件 我在使用正则表达式编写路径和模式时遇到问题。

我的路径有这样的结构:

'/Users/folderA/folderB/folderC/folderD/01_01_2012/folderE/file.txt'

因此,路径几乎相同,只是日期名称的文件夹总是会改变 我试图像这样加载它:

filesToProcess <- list.files(path = "/Users/folderA/folderB/folderC/folderD/", 
                             pattern = "*_*_*/folderE/*.txt")

但这似乎不起作用。
有人可以帮我用正则表达式写下这个吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

这里的关键是使用参数recursive=TRUE,以便您可以搜索原始目录中的文件夹:

filesToProcess <- list.files(path = "/Users/folderA/folderB/folderC/folderD", 
                      pattern = "txt", recursive = TRUE, full.names = TRUE)

模式必须与文件名相对应,它不能引用文件夹的名称(参见?list.files)。这就是为什么你需要第二步,你必须缩小到你想要的特定文件夹。注意在前一个调用中使用参数full.names=TRUE,允许我们保留每个文件的路径(注意:您还必须删除/参数的最终path,否则它我们的输出结果加倍,当您尝试上传文件时会导致错误。

filesToProcess[grep("folderE", filesToProcess)]

最后一点:
无论如何,你的正则表达式都有缺陷:*表示

  

前面的项目将匹配零次或多次。

您想要的是.:请参阅?regexp

  

期间。匹配任何单个字符。

答案 1 :(得分:0)

虽然主题是指正则表达式,但从示例中可以看出,您确实想要使用globs。在这种情况下,尝试:

Sys.glob("/Users/folderA/folderB/folderC/folderD/*_*_*/folderE/*.txt")