我是R的新手,正在更新R脚本以迭代使用ArcGIS创建的一系列.dbf表并生成一系列图表。
我有一个目录C:\ Scratch,它将包含我的所有.dbf文件。但是,当ArcGIS创建这些表时,它还包含.dbf.xml文件。我想从我的文件列表中删除这些.dbf.xml文件,从而删除我的迭代。我试过搜索和试验正则表达式无济于事。这是我正在使用的基本表达式(不包括所有各种实验):
files <- list.files(pattern = "dbf")
任何人都可以给我一些指导吗?
答案 0 :(得分:166)
files <- list.files(pattern = "\\.dbf$")
最后 $
表示这是字符串的结尾。 "dbf$"
也可以使用,但添加\\.
(.
是正则表达式中的特殊字符,因此您需要将其转义)确保您只匹配扩展名为.dbf
的文件(in例如,您有.adbf
个文件。
答案 1 :(得分:55)
尝试使用globs而不是正则表达式,因此它只会选出以.dbf
filenames <- Sys.glob("*.dbf")
答案 2 :(得分:12)
使用"\\.dbf"
字符固定模式以在字符串末尾找到$
:
list.files(pattern = "\\.dbf$")
答案 3 :(得分:6)
我不太擅长使用复杂的正则表达式,所以我会通过以下方式完成这项任务:
files <- list.files()
dbf.files <- files[-grep(".xml", files, fixed=T)]
第一行只列出工作目录中的所有文件。第二个删除包含“.xml”的所有内容(grep在'files'向量中返回此类字符串的索引;使用负索引进行子集删除向量中的相应条目)。 grep函数的“固定”参数只是我的心血来潮,因为我通常希望它在没有Perl风格的花式正则表达式的情况下执行原始模式匹配,这可能会给我带来惊喜。
我知道这样的解决方案只是反映了我的教育中的缺点,但对于新手而言,它可能是有用的=)至少它很容易。
答案 4 :(得分:3)
为您提供完整路径的文件列表:
Sys.glob(file.path(file_dir, "*.dbf")) ## file_dir = file containing directory