2

我正在尝试从不同的文件夹在 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")

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

非常感谢!

4

2 回答 2

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

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

于 2012-12-16T09:46:57.233 回答
0

尽管主题是指正则表达式,但从示例中您似乎确实想使用 glob。在这种情况下尝试:

Sys.glob("/Users/folderA/folderB/folderC/folderD/*_*_*/folderE/*.txt")
于 2012-12-16T14:02:47.020 回答