Использование R для вывода списка всех файлов с указанным расширением - PullRequest
114 голосов
/ 02 февраля 2011

Я очень новичок в R и работаю над обновлением сценария R, чтобы выполнять итерацию по серии таблиц .dbf, созданных с использованием ArcGIS, и создавать серию графиков.\ Scratch, который будет содержать все мои файлы .dbf.Однако, когда ArcGIS создает эти таблицы, он также включает файл .dbf.xml.Я хочу удалить эти файлы .dbf.xml из моего списка файлов и, следовательно, мою итерацию.Я пытался искать и экспериментировать с регулярными выражениями безрезультатно.Это базовое выражение, которое я использую (исключая все различные эксперименты):

files <- list.files(pattern = "dbf")

Кто-нибудь может дать мне какое-то руководство?

Ответы [ 5 ]

167 голосов
/ 02 февраля 2011
files <- list.files(pattern = "\\.dbf$")

$ в конце означает, что это конец строки. "dbf$" также будет работать, но добавление \\. (. является специальным символом в регулярных выражениях, поэтому вам нужно его избегать) гарантирует, что вы сопоставите только файлы с расширением .dbf (в случае, например, .adbf files ).

57 голосов
/ 02 февраля 2011

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

filenames <- Sys.glob("*.dbf")
12 голосов
/ 02 февраля 2011

Прикрепите шаблон, чтобы найти "\\.dbf" в конце строки, используя символ $:

list.files(pattern = "\\.dbf$")
6 голосов
/ 03 февраля 2011

Я не очень хорош в использовании сложных регулярных выражений, поэтому я бы выполнил такую ​​задачу следующим образом:

files <- list.files()
dbf.files <- files[-grep(".xml", files, fixed=T)]

Первая строка просто перечисляет все файлы из рабочего каталога. Второй отбрасывает все, что содержит «.xml» (grep возвращает индексы таких строк в векторе «files»; подстановка с отрицательными индексами удаляет соответствующие записи из вектора). «фиксированный» аргумент для функции grep - это только моя прихоть, поскольку я обычно хочу, чтобы она выполняла грубое сопоставление с образцом без необычных регулярных выражений в стиле Perl, что может вызвать у меня удивление.

Я знаю, что такое решение просто отражает недостатки в моем образовании, но для новичка это может быть полезно =) по крайней мере, это просто.

3 голосов
/ 06 июня 2017

Предоставляет список файлов с полным путем:

  Sys.glob(file.path(file_dir, "*.dbf")) ## file_dir = file containing directory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...