2015-12-02 85 views
1

如何僅列出文件,而不是使用list.files(不遞歸)的目錄?它有一個include.dirs參數,但是在不遞歸使用時會被忽略。僅列出文件,但不包含使用list.files的目錄

我一直在想這樣

list.files(path=myDir, pattern="[^/]$") 

,但似乎並沒有工作,或上面有一些變化。有沒有一個正則表達式,我可以在這裏插入或功能。我知道我可以做list.dirs並採取setdiff,但這已經夠慢了,我希望這會更快。

PS:目前在linux上,但需要一些跨平臺的工作。

PPS:file.info真的很慢,所以我認爲這也行不通。

PPPS:它不需要是list.files,這只是我認爲應該做的功能。

+0

我不認爲你會發現什麼比'˚F<快得多 - 函數(){setdiff(list.files(),list.dirs(full.names = FALSE,遞歸= FALSE)) }; F()'。 –

+0

做的所有文件都有擴展名嗎? 'list.files('〜/ desktop',full.names = TRUE,pattern ='\\。\\ w + $')' – rawr

+1

'系統(「ls 」)調用? –

回答

1

考慮到匹配包含字母或數字的任何文件,其中包含點擴展(留出子目錄,但不幸的是文件,而無需擴展)這個正則表達式:

# WITH ANCHORING 
files <- list.files(path, pattern=("[a-zA-Z0-9]*[.][a-zA-Z0-9]*$")) 

# MATCHING LETTER AND/OR NUMBER FILES WITH EXTENSION 
files = list.files(myDir, pattern=("[a-zA-Z0-9]*[.]")) 

# WILDCARD FILE MATCHING WITH EXTENSION 
files = list.files(myDir, pattern=("*[.]")) 

其他一些正則表達式的變化捕捉文件與週期(注意,這些還可以獲得目錄與時間和錯過的文件沒有擴展名)

list.files(pattern="\\..+$") 
list.files(pattern="\\.[[:alnum:]]+$") 

而且使用system2ls似乎工作得很好(感謝@ 42-以及FR OM評論),

system2("ls", args=c("-al", "|", "grep", "^-")) 

應該得到唯一的規則文件(包括那些沒有擴展名),或

system2("ls", args=c("--classify")) 

應具有目錄返回文件「/」後綴,使他們能夠確定。

另一種可選擇的開源解決方案,考慮Python解決方案,讓您條件,如果項目是一個目錄,並使用os.path.join()是不可知的任何操作系統平臺。

import os 

files = [f for f in os.listdir(myDir) if os.path.isfile(os.path.join(myDir, f))] 
相關問題