2012-12-12 52 views
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") 

但這似乎並沒有工作。
有人能幫我寫下正則表達式嗎?

非常感謝!

回答

1

這裏的關鍵是使用的說法recursive=TRUE這樣就可以是在原目錄中的文件夾內搜索:

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

圖案具有對應於文件名,它不能請參閱文件夾的名稱(請參閱?list.files)。這就是爲什麼你需要第二步,你必須縮小到你想要的特定文件夾。請注意,在前面的調用,使我們能夠保持每個文件(NB的路徑使用參數​​的:你也有砸path參數的最終/否則它結束了在我們的產量增加了一倍,並導致錯誤時你會嘗試上傳文件)。

filesToProcess[grep("folderE", filesToProcess)] 

最後請注意:
你的正則表達式是反正有缺陷:*意味着

之前的項目將被匹配零次或多次。

你想要的是什麼.:看?regexp

週期。匹配任何單個字符。

0

儘管主題引用了正則表達式,但從示例中看來,您確實想要使用globs。在這種情況下,嘗試:

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