R中使用Glob模式从多级目录提取符合规则的txt文本文件
问题根因
- 你当前代码中的
invert = TRUE参数会返回不符合glob规则的文件,和你的需求完全相反,是导致返回所有文件的核心原因,需要优先删除。 fs::dir_ls默认的glob匹配仅针对文件名部分,不会匹配多级路径结构,所以你写的包含多段目录的glob规则不会生效。
修复方案
方法1:调整fs::dir_ls参数(推荐)
添加glob_type = "path"参数,让glob规则匹配完整的相对路径,即可命中多级目录下的目标文件:
# 匹配符合规则的所有txt文件路径 target_files <- fs::dir_ls( path = "M:/instrument/project/", glob = "experiment_*/2021-04-11*/raw_data/files*.txt", recurse = TRUE, glob_type = "path" ) # 直接用vroom批量读取所有文件 library(vroom) result_df <- vroom(target_files, id = "file_path") # id参数会新增一列记录文件来源路径
方法2:使用基础R list.files的正则匹配
如果不想依赖fs包的参数,可以用正则模式实现相同效果:
target_files <- list.files( path = "M:/instrument/project/", pattern = "^experiment_.*[\\\\/]2021-04-11.*[\\\\/]raw_data[\\\\/]files.*\\.txt$", recursive = TRUE, full.names = TRUE )
注:正则中的[\\\\/]是为了兼容Windows和Unix系统的路径分隔符。
内容的提问来源于stack exchange,提问作者DrBalticYaldie
相关产品推荐
相关产品推荐

