сделать file.exists () без учета регистра - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть строка кода в моем скрипте, которая проверяет, существует ли файл (на самом деле, много файлов, эта строка зацикливается на кучу разных файлов):

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

Это ищет любой файл в каталоге / files /, в котором есть «name», например «filename.csv». Однако некоторые из моих файлов называются «fileName.csv» или «thisfileNAME.csv». Они не получают признание. Как я могу заставить file.exists обрабатывать эту проверку без учета регистра?

В моем другом коде я обычно делаю любые импортированные имена или списки сразу в нижнем регистре с помощью функции tolower . Но я не вижу никакой возможности включить это в функцию file.exists .

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Следующее должно возвращать 1, если имя файла совпадает в любом случае, и 0, если это не так.

max(grepl("*name*",list.files()),ignore.case=T)
0 голосов
/ 19 февраля 2020

Предлагаемое решение с использованием list.files:

Если у нас много файлов, мы можем захотеть сделать это только один раз, в противном случае мы можем вставить функцию (и передать path_to_root_directory вместо found_files в функция)

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

Поведение как file.exists (возвращаемое значение логическое):

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

Возвращаемое значение - это файл с орфографией, найденный в каталоге, или 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"))

Возвращает:

[1] TRUE

Или
Возвращаемое значение - это файлы с орфографией, найденными в каталоге, или 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"))

Возвращает:

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