如何使用list.files
(非递归)仅列出文件,而不列出目录?它有一个include.dirs
参数,但在没有递归使用时会被忽略。
我一直在想类似
的东西list.files(path=myDir, pattern="[^/]$")
但这似乎不起作用,或者它的一些变化。有没有我可以插入的正则表达式或函数。我知道我可以做list.dirs
并取setdiff
,但这已经足够慢了,我希望这会更快。
PS:目前在Linux上,但需要跨平台工作的东西。
PPS:file.info
真的很慢,所以我觉得这也行不通。
PPPS:它不需要是list.files
,这只是我认为应该这样做的功能。
答案 0 :(得分: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:]]+$")
将system2
与ls
一起使用似乎效果很好(感谢@ 42-以及评论),
system2("ls", args=c("-al", "|", "grep", "^-"))
应该只获取常规文件(包括没有扩展名的文件)或
system2("ls", args=c("--classify"))
应返回包含&#34; /&#34;的目录的文件附上所以他们可以确定。
对于替代的开源解决方案,请考虑Python解决方案,该解决方案允许您调整item是否为目录,并且os.path.join()
与任何OS平台无关。
import os
files = [f for f in os.listdir(myDir) if os.path.isfile(os.path.join(myDir, f))]