首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使file.exists()大小写不敏感

使file.exists()大小写不敏感
EN

Stack Overflow用户
提问于 2020-02-19 14:49:07
回答 2查看 887关注 0票数 0

我的脚本中有一行代码,用于检查文件是否存在(实际上,有许多文件,这一行将循环用于一堆不同的文件):

代码语言:javascript
运行
复制
file.exists(Sys.glob(file.path(getwd(), "files", "*name*")))

它查找目录/ file /中有"name“的任何文件,例如"filename.csv”。但是,我的一些文件名为"fileName.csv“或"thisfileNAME.csv”。他们得不到认可。如何使file.exists以不区分大小写的方式对待此检查?

在我的其他代码中,我通常使用tolower函数立即生成任何导入的名称或列表。但是我没有看到在file.exists函数中包含这个选项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-19 15:06:06

使用list.files的建议解决方案

如果我们有很多文件,我们可能只想这样做一次,否则我们可以放入函数(并将path_to_root_directory而不是found_files传递给函数)

代码语言:javascript
运行
复制
  found_files <- list.files(path_to_root_directory, recursive=FALSE)

行为为file.exists (返回值为布尔值):

代码语言:javascript
运行
复制
  fileExIsTs <- function(file_path, found_files) {
    return(tolower(file_path) %in% tolower(found_files))
  }

如果不匹配,则返回值是具有拼写的文件,如在目录或character(0)中找到:

代码语言:javascript
运行
复制
  fileExIsTs <- function(file_path, found_files) {
    return(found_files[tolower(found_files) %in% tolower(file_path)])
  }

编辑:

适应新要求的新解决方案:

代码语言:javascript
运行
复制
keywordExists <- function(keyword, found_files) {
  return(any(grepl(keyword, found_files, ignore.case=TRUE)))
}

keywordExists("NaMe", found_files=c("filename.csv", "morefilenames.csv"))

返回:

代码语言:javascript
运行
复制
[1] TRUE

如果不匹配,则返回值是具有拼写的文件,如在目录或character(0)中找到:

代码语言:javascript
运行
复制
keywordExists2 <- function(file_path, found_files) {
  return(found_files[grepl(keyword, found_files, ignore.case=TRUE)])
}

keywordExists2("NaMe", found_files=c("filename.csv", "morefilenames.csv"))

返回:

代码语言:javascript
运行
复制
[1] "filename.csv"      "morefilenames.csv"
票数 0
EN

Stack Overflow用户

发布于 2020-02-19 15:15:18

在任何情况下,如果文件名匹配,则返回1;如果不匹配,则返回0。

代码语言:javascript
运行
复制
max(grepl("*name*",list.files()),ignore.case=T)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60302960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档