r-使用模式过滤文件



我想从一个有很多文件的目录中读取几个文件。我相对较快地找到了第一个过滤器,因此只有某些文件仍然显示。

dir(
path = "m:/"
,pattern = "bestand|bewegung.dat|txt$"
)

结果我得到了以下列表:

kosis_bewegung_01022018.txt
kosis_bewegung_01022018_fehlerliste.txt
kosis_bewegung_01022019.dat
kosis_bewegung_01022019_fehlerliste.dat
kosis_bestand_01022018.txt
kosis_bestand_01022018_fehlerliste.txt
kosis_bestand_01022019.dat
kosis_bestand_01022019_fehlerliste.dat

现在我还想隐藏包含";fehlerliste";。

我必须如何为此调整我的过滤器?一步到位可能吗?

R正则表达式支持负前瞻断言,因此以下内容应该有效:

dir(
path = "m:/"
,pattern = "^(?!.*fehlerliste).*(?:bestand|bewegung).*.(?:dat|txt)$"
)

请注意我用来隔离交替的非捕获组。否则,任何以txt结尾的文件名都将匹配。

解释:

^                     # Start of string
(?!.*fehlerliste)     # Assert that "fehlerliste" doesn't occur in the string  
.*                    # match any number of characters
(?:bestand|bewegung)  # match "bestand" or "bewegung"
.*                    # match any number of characters
.                    # match a dot
(?:dat|txt)           # match "dat" or "txt"
$                     # End of string

我会这样做:

  1. 使用bestand|bewegung.dat|txt$获取文件名
  2. 清除包含fehlerliste的文件

使用dplyr链接看起来更整洁:

library(dplyr)
files = grep(list.files(path = "m:/"),
pattern = "bestand|bewegung.dat|txt$", 
value = TRUE)) %>%
grep(list.files(path = "m:/"), 
pattern = "fehlerliste", 
invert = TRUE, value = TRUE))

如果您不想使用dplyr,则:

files = grep(list.files(path = "m:/"), 
pattern = "bestand|bewegung.dat|txt$",
value = TRUE))
files = grep(list.files(path = "m:/"),
pattern = "fehlerliste",
invert = TRUE, value = TRUE))

最新更新