【问题标题】:extract files using glob2rx list.files使用 glob2rx list.files 提取文件
【发布时间】:2021-03-05 14:57:04
【问题描述】:

我想list.files 包含一些东西和一些东西并以.png 结尾。我可以分步完成,但感觉如果我使用glob2rx 会更容易。这些是文件:

[1] "cc_ww_03_Mar_2021_.png"       
[2] "cc_ww_05_Mar_2021_.png"       
[3] "pp_ui_03_Mar_2021_.png"                      
[4] "zz_ww_03_Mar_2021_.png"                      
[5] "pp_ui_03_Mar_2021_.png"                     
[6] "cd_ww_03_Mar_2021_.png" 
[7] "cd_ww_03_Mar_2021_.csv" 

我要提取包含wwdate_needed <- "03_Mar_2021" 并以.png 结尾的文件:

[1] "cc_ww_03_Mar_2021_.png"
[4] "zz_ww_03_Mar_2021_.png"                      
[6] "cd_ww_03_Mar_2021_.png" 

要删除^ 我包括trim.head 讨论here

glob2rx(paste0("*WW", "*", date_needed, "*.png"), trim.head = TRUE)
# [1] "WW.*03_Mar_2021.*\\.png$"

但它不起作用:

pnglist <- list.files(path = "folder/",
             pattern = glob2rx(paste0("*ww", "*", date_needed, "*.png"), trim.head = TRUE),
             full.names = T)
pnglist  
# character(0)

我错过了什么? glob2rx 是这里最干净的选项吗?

谢谢

【问题讨论】:

标签: r wildcard glob


【解决方案1】:

问题中的 glob 使用大写 WW,但文件名使用小写 ww。您还可以检查文件夹路径是否正确。使用

  • 在最后的注释中输入
  • 问题中的 glob,但将 WW 更改为 ww 并稍微简化
  • 使用 TRUE 而不是 T,因为 T 可能是一个变量来屏蔽它
  • 删除我们不需要的参数

我们有:

glob <- paste0("*ww*", date_needed, "*.png")
list.files(path = folder, pattern = glob2rx(glob), full.names = TRUE)
## [1] "./cc_ww_03_Mar_2021_.png" "./cd_ww_03_Mar_2021_.png"
## [3] "./zz_ww_03_Mar_2021_.png"

或者,使用直接使用 glob 的 Sys.glob

glob2 <- file.path(folder, paste0("*ww*", date_needed, "*.png"))
Sys.glob(glob2)
## [1] "./cc_ww_03_Mar_2021_.png" "./cd_ww_03_Mar_2021_.png"
## [3] "./zz_ww_03_Mar_2021_.png"

注意

使用的输入是:

filenames <- c( "cc_ww_03_Mar_2021_.png",
"cc_ww_05_Mar_2021_.png",
"pp_ui_03_Mar_2021_.png",                     
"zz_ww_03_Mar_2021_.png",                     
"pp_ui_03_Mar_2021_.png",                    
"cd_ww_03_Mar_2021_.png",
"cd_ww_03_Mar_2021_.csv")
for(f in filenames) cat(file = f)

folder <- "."
date_needed <-  "03_Mar_2021"

【讨论】:

  • 已修改答案以使用您的 glob,但文件夹等于当前目录和 ww 而不是 WW。似乎可以使用 glob2rx 或 Sys.glob。
  • 我意识到我的数据中的问题是我在.png 之前以不同的顺序放置了date_neededww,例如glob2rx(paste0(date_needed, "*ww*", "*.png"))。有没有一种简单的方法来修改代码所以顺序无关紧要?还有你的glob2rx(glob) 返回"^.*ww.*03_Mar_2021.*\\.png$",我认为^ 意味着它必须以ww 开头,但在这里似乎无关紧要(它拿起cc_ww_03_Mar_2021_.png,它以cc 开头)?谢谢
  • 你可以使用 |指定两种选择中的任何一种。
  • 你能解释一下"^.*ww.*03_Mar_2021.*\\.png$" 中的^ 是如何拾取以cc 开头的cc_ww_03_Mar_2021_.png,我认为需要trim.head = TRUE 才能删除^
  • ^ 匹配字符串的开头,然后 .* 匹配后面的内容,直到 ww。
猜你喜欢
  • 2017-11-06
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
相关资源
最近更新 更多