R语言依据文件名日期规律批量筛选指定月份CSV文件的方法
R语言按月份批量筛选Mean_SST系列CSV文件实现方案
前置准备
- 提前确认所有CSV的存储位置,如果是存在多级嵌套子目录下,后续调用文件扫描函数时需要开启递归扫描参数
- 替换代码中的路径参数为本地实际存储CSV的文件夹绝对路径,降低路径识别报错概率
步骤1:初筛全量目标文件
通过固定文件名前缀做第一轮过滤,排除目录下和SST无关的其他文件,减少后续处理的计算量:
# 获取目录下所有以Mean_SST_为开头、以.csv为后缀的文件全路径 all_target_files <- list.files( path = "本地CSV存储文件夹路径", pattern = "^Mean_SST_.*\\.csv$", full.names = TRUE, recursive = FALSE # 如果有子目录存文件,把这个参数改成TRUE )
步骤2:基于文件名提取日期做月份匹配
完全不需要读取任何CSV的内部内容,仅通过文件名里的结构化日期字段完成筛选,8031个文件的全量处理耗时仅为毫秒级,不会占用额外内存:
- 配置需要筛选的目标月份,比如要筛选所有2月的文件,参数设为2,要筛选5月就设为5
- 通过正则把文件名里夹在
Mean_SST_和.csv之间的日期字符串提取出来 - 把字符串转成标准日期格式后,提取每个文件对应的月份值,和目标值做匹配
可直接运行的代码片段:
# 配置目标筛选月份 target_month <- 2 # 正则提取每个文件对应的日期字符串 file_date_text <- gsub( pattern = "^.*Mean_SST_(.*)\\.csv$", replacement = "\\1", x = all_target_files ) # 提取每个文件对应的月份数值 file_month_value <- as.integer(format(as.Date(file_date_text), "%m")) # 过滤得到最终匹配指定月份的文件列表 matched_month_files <- all_target_files[file_month_value == target_month]
常见踩坑提醒
- 写正则匹配的时候一定要加首尾锚定(即pattern里开头的
^和结尾的$),不然很容易把文件名里带Mean_SST关键词的其他临时文件、备份文件误算进来 - 不要图省事用模糊的字符串包含判断(比如直接查文件名里有没有
-02-片段),这种方式会误匹配其他月份的文件(比如10月、12月的日期结构中带02的片段,像Mean_SST_2001-10-02这类非2月文件也会被命中),转成标准日期再提取月份的方式是最严谨的
效果校验:拿到匹配结果后可以通过文件数快速核对是否正确,以筛选2月文件为例,1997-12-31到2019-12-31的时间区间内,一共覆盖23个自然年的2月,对应23个独立文件,如果结果数量和这个数值偏差较大,就需要检查正则提取的规则是否存在漏匹配、误匹配的问题。
内容的提问来源于stack exchange,提问作者Nuwansiri Wijesinghe
相关产品推荐
相关产品推荐

