Список всех файлов, соответствующих шаблону полного пути в R

Я пытаюсь получить список файлов, соответствующих шаблону полного пути . До сих пор я использовал list.files (), но это не сработало.

Предположим, что у нас есть следующая организация каталогов:

results |- A | |- data-1.csv | |- data-2.csv | |- B |- data-1.csv |- data-2.csv 

Затем выполните команду:

 list.files(pattern='data-.*\\.csv', recursive=TRUE) 

вернет все файлы, соответствующие шаблону. Это работает, но проблема возникает при использовании шаблона полного пути . Например, если я хочу получить все CSV-файлы из результатов каталога / A , я мог бы сделать:

 list.files(pattern='results/A/data-.*\\.csv', recursive=TRUE) 

Это не работает. Так или иначе, похоже, что R не может использовать шаблон полного пути в качестве регулярного выражения. В этом случае решением может быть просто использовать результаты / A в качестве базового пути. Но в более сложных проблемах это невозможно. Например, в какой-то момент мы можем захотеть сопоставить подкаталоги, содержащие только символы:

 list.files(pattern='results/[AZ]+/data-.*\\.csv', recursive=TRUE) 

Можно ли это сделать в R?

ОБНОВЛЕНИЕ: после использования ad hoc-решений некоторое время я решил прекратить печатать снова и снова. Итак, я создал библиотеку для упрощения этой задачи.

Во-первых, обратите внимание, что вы не используете шаблоны регулярных выражений. Ваш первый пример должен быть:

 list.files(pattern='data-.*\\.csv', recursive=TRUE) 

Затем кажется, что шаблон, сопоставляемый внутри list.files , применяется к list.files файлов (т. list.files Не включая путь к каталогу), поэтому вы можете разбить задачу на:

  1. Найти все файлы, соответствующие только basename, вернуть их полный путь:

     basename.matches <- list.files(pattern='data-.*\\.csv', recursive=TRUE, full.names = TRUE) basename.matches # [1] "./results/A/data-1.csv" "./results/A/data-2.csv" "./results/B/data-1.csv" # [4] "./results/B/data-2.csv" 
  2. Храните только те, которые соответствуют ожидаемой директории (-ий):

     full.matches <- grep(pattern='^\\./results/A/', basename.matches, value = TRUE) full.matches # [1] "./results/A/data-1.csv" "./results/A/data-2.csv" 

Вы не можете сделать это только с помощью list.files потому что он перебирает каждый элемент в path и применяет регулярное выражение к содержащимся в нем файлам. Но поскольку аргумент path для list.files может принимать вектор, вы можете использовать его для решения своей проблемы.

 dirs <- grep("[AZ]+$",list.dirs("results",recursive=FALSE),value=TRUE) list.files(dirs, "data-.*\\.csv", recursive=TRUE, full.names=TRUE) 

Я думаю, что есть еще более простое решение:

Sys.glob(file.path(results, "[AZ]", "data-*.csv"))

я буду использовать

 paths <- list.files(results, pattern= glob2rx("*data-*.csv$*"), full.names=T, recursive=T) 
  • Regex.Match целые слова
  • Регулярные выражения и GWT
  • Как использовать переменную на стороне замены оператора замены Perl?
  • Как включить новые строки в поиск меньше?
  • Является gcc 4.8 или более ранней ошибкой регулярных выражений?
  • Как Regex искать / заменять только первое вхождение в строку в .NET?
  • В чем сложность регулярного выражения?
  • Как подсчитать слова в MySQL / регулярном выражении replacer?
  • Регулярное выражение, соответствующее действительным адресам IPv6
  • Какое регулярное выражение может соответствовать последовательностям одного и того же символа?
  • Когда это полезное приложение \ G в регулярном выражении?
  • Interesting Posts

    Three.js Collada – Каков правильный способ утилизации () и освобождения памяти (garbage collection)?

    хранить и извлекать объект classа по общим предпочтениям

    Есть ли разница между компакт-диском Ubuntu Live и установочным компакт-диском Ubuntu

    XAMPP не запускает Apache в Mac OS X 10.6.8 Snow Leopard

    Где ConfigurationGenerateSchemaCreationScript () переместился в Hibernate 5

    Могут ли диски SAS работать на материнской плате SATA

    Каков правильный способ использования `pkg-config` из` cmake`?

    Указанное значение не соответствует требуемому формату yyyy-MM-dd

    Как очистить все хранилище HTML5 от Safari?

    Восстановление документов Excel, которые были закрыты без сохранения

    Как вы включаете имя пользователя при хранении электронной почты и пароля с помощью Firebase (BaaS) в приложении для Android?

    Поверните изображение на 90, 180 или 270 gradleусов

    Переменная объекта или с не заданной переменной блока (Ошибка 91)

    Почему нулевая ссылка печатается как “null”

    Как установить Windows 7 с внешнего жесткого диска?

    Давайте будем гением компьютера.