Я очень новичок в R и работаю над обновлением сценария R для перебора серии таблиц .dbf, созданных с помощью ArcGIS, и создания серии графиков.
У меня есть каталог C: \ Scratch, в котором будут находиться все мои файлы .dbf. Однако, когда ArcGIS создает эти таблицы, он также включает файл .dbf.xml. Я хочу удалить эти файлы .dbf.xml из моего списка файлов и, следовательно, моей итерации. Я безрезультатно пытался искать и экспериментировать с регулярными выражениями. Это основное выражение, которое я использую (исключая все различные эксперименты):
files <- list.files(pattern = "dbf")
Кто-нибудь может дать мне какое-нибудь направление?
glob2rx()
часто оказывается полезной.Ответы:
$
в конце означает, что это конец строки."dbf$"
тоже будет работать, но добавление\\.
(.
это специальный символ в регулярных выражениях, поэтому вам нужно его избегать) убедитесь, что вы сопоставляете только файлы с расширением.dbf
(если у вас есть, например,.adbf
файлы).источник
ignore.case
аргумент функции, поэтомуlist.files(pattern = "\\.dbf$", ignore.case=TRUE)
. И посмотрите на страницу справки для этой функции (?list.files
), чтобы узнать больше.Попробуйте это, в котором используются глобусы, а не регулярные выражения, поэтому он будет выбирать только имена файлов, заканчивающиеся на
.dbf
источник
Прикрепите шаблон, который нужно найти
"\\.dbf"
в конце строки, используя$
символ:источник
\` escape the
.` сейчас. Возникает вопрос, почему за это проголосовали против?Я не очень хорошо использую сложные регулярные выражения, поэтому я бы сделал такую задачу следующим образом:
В первой строке перечислены все файлы из рабочего каталога. Второй удаляет все, что содержит ".xml" (grep возвращает индексы таких строк в векторе files; подмножество с отрицательными индексами удаляет соответствующие записи из вектора). «Фиксированный» аргумент для функции grep - это просто моя прихоть, поскольку я обычно хочу, чтобы он выполнял грубое сопоставление с образцом без модных регулярных выражений в стиле Perl, что может вызвать у меня удивление.
Знаю, что такое решение просто отражает недостатки в моем образовании, но для новичка оно может быть полезно =) По крайней мере, это просто.
источник
-
знак раньшеgrep
. Мне нужно было такое решение для извлечения определенных файлов из zip-файла. Сначала получите список файлов в data.frame, а затем получите определенные файлы и извлеките их позже.lf <- unzip(file, list=T)[,1]; files.shp <- lf[grep(".shp", lf, fixed=T)]
Предоставляет вам список файлов с полным путем:
источник