【问题标题】:Finding multiple files from different folders using regular expressions使用正则表达式从不同文件夹中查找多个文件
【发布时间】:2012-12-12 09:44:36
【问题描述】:

我正在尝试在 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")

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

非常感谢!

【问题讨论】:

    标签: regex r file-upload


    【解决方案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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-23
        • 1970-01-01
        • 2018-04-21
        • 2012-11-30
        相关资源
        最近更新 更多