使用R语言按匹配模式删除指定目录文件失败的技术求助
解决R代码无法匹配并删除目标文件的问题
我来帮你搞定这个删除文件的问题!你遇到的核心问题是**dir()函数的pattern参数用了shell风格的通配符,而它实际需要的是正则表达式**。
问题根源
你写的pattern="*_pattern.csv"里,*在正则语法中是“匹配前面元素零次或多次”的量词,不是表示“任意字符”的通配符。所以这个模式根本匹配不到任何文件,自然file.remove()也就没东西可删,还会抛出警告。
修正后的代码
把pattern改成正则表达式的写法,用.*表示“任意长度的任意字符”,这样就能正确匹配所有以_pattern.csv结尾的文件了:
# 先确认匹配到的文件(安全第一步!) target_files <- dir(path = "D:/Folder/RestOfMyPath/", pattern = ".*_pattern.csv") print(target_files) # 确认无误后再执行删除 if (length(target_files) > 0) { file.remove(file.path("D:/Folder/RestOfMyPath/", target_files)) } else { message("没有匹配到任何目标文件,不执行删除操作") }
额外的安全建议
- 我特意加了
file.path()来拼接路径,避免手动写路径时出现分隔符错误,跨平台也更友好 - 先打印匹配到的文件列表,确认是你要删的目标后再执行删除,进一步降低误删风险
- 如果要更严谨,还可以加上
full.names = TRUE参数让dir()直接返回完整路径,这样后续删除更方便:
target_files <- dir(path = "D:/Folder/RestOfMyPath/", pattern = ".*_pattern.csv", full.names = TRUE) print(target_files) if (length(target_files) > 0) { file.remove(target_files) }
这样修改后,应该就能顺利删除你指定的my_file1_pattern.csv这类文件了,而且因为有模式匹配,就算选错目录,只要没有符合.*_pattern.csv的文件,也不会执行删除操作,完美符合你的安全需求!
内容的提问来源于stack exchange,提问作者Alexandros
相关产品推荐
相关产品推荐

