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