使用R列出具有指定扩展名的所有文件

cha*_*ins 124 r

我是R的新手,正在更新R脚本以迭代使用ArcGIS创建的一系列.dbf表并生成一系列图表.

我有一个目录,C:\ Scratch,它将包含我的所有.dbf文件.但是,当ArcGIS创建这些表时,它还包含.dbf.xml文件.我想从我的文件列表中删除这些.dbf.xml文件,从而删除我的迭代.我试过搜索和试验正则表达式无济于事.这是我正在使用的基本表达式(不包括所有各种实验):

files <- list.files(pattern = "dbf")
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一些方向吗?

Mar*_*rek 180

files <- list.files(pattern = "\\.dbf$")
Run Code Online (Sandbox Code Playgroud)

$最后意味着这是字符串的结尾."dbf$"也会工作,但添加\\.(.正则表达式中的特殊字符,因此您需要将其转义)确保您只匹配带扩展名的文件.dbf(如果您有例如.adbf文件).

  • @nsn是的,但是如果你想要的话,那么函数的`ignore.case`参数就是`list.files(pattern ="\\.dbf $",ignore.case = TRUE)`.并查看该函数的帮助页面(`?list.files`)以获取更多详细信息. (6认同)

G. *_*eck 58

试试这个使用globs而不是正则表达式,所以它只会选出结尾的文件名 .dbf

filenames <- Sys.glob("*.dbf")
Run Code Online (Sandbox Code Playgroud)


Rei*_*son 12

"\\.dbf"使用$字符将模式挂在字符串末尾的模式:

list.files(pattern = "\\.dbf$")
Run Code Online (Sandbox Code Playgroud)


Sur*_*rya 7

为您提供具有完整路径的文件列表:

  Sys.glob(file.path(file_dir, "*.dbf")) ## file_dir = file containing directory
Run Code Online (Sandbox Code Playgroud)


don*_*kin 6

我不是很擅长使用复杂的正则表达式,所以我会通过以下方式完成这样的任务:

files <- list.files()
dbf.files <- files[-grep(".xml", files, fixed=T)]
Run Code Online (Sandbox Code Playgroud)

第一行只列出工作目录中的所有文件.第二个删除包含".xml"的所有内容(grep在'files'向量中返回此类字符串的索引;使用负索引进行子集删除向量中的相应条目).grep函数的"固定"参数只是我的心血来潮,因为我通常希望它在没有Perl风格的花式正则表达式的情况下执行原始模式匹配,这可能会让我感到意外.

我知道这样的解决方案只是反映了我的教育中的缺点,但对于新手而言,它可能是有用的=)至少它很容易.