使 file.exists() 不区分大小写

make file.exists() case insensitive

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

file.exists(Sys.glob(file.path(getwd(), "files", "*name*")))

这会在目录 /files/ 中查找任何包含 "name" 的文件,例如"filename.csv"。但是,我的一些文件被命名为 "fileName.csv" 或 "thisfileNAME.csv"。他们没有得到认可。如何让 file.exists 以不区分大小写的方式处理此检查?

在我的其他代码中,我通常使用 tolower 函数使任何导入的名称或列表立即变为小写。但是我没有看到任何选项可以将其包含在 file.exists 函数中。

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

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

  found_files <- list.files(path_to_root_directory, recursive=FALSE)

行为如 file.exists(return 值为布尔值):

  fileExIsTs <- function(file_path, found_files) {
    return(tolower(file_path) %in% tolower(found_files))
  }

Return 值是在目录中找到拼写的文件,或者 character(0) 如果不匹配:

  fileExIsTs <- function(file_path, found_files) {
    return(found_files[tolower(found_files) %in% tolower(file_path)])
  }

编辑:

满足新要求的新解决方案:

keywordExists <- function(keyword, found_files) {
  return(any(grepl(keyword, found_files, ignore.case=TRUE)))
}

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

Returns:

[1] TRUE


Return 值是在目录中找到拼写的文件,或者 character(0) 如果不匹配:

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"))

Returns:

[1] "filename.csv"      "morefilenames.csv"

如果文件名在任何情况下都匹配,则以下内容应 return 为 1,否则为 0。

max(grepl("*name*",list.files()),ignore.case=T)