Фільтрація файлів може стати складною задачею, особливо коли потрібно відібрати файли за певним критерієм, таким як початковий рядок у їхній назві. У цій статті ми розглянемо ефективний спосіб фільтрації файлів за початковим рядком у назві, використовуючи мову програмування R та регулярні вирази.
Почнемо з розгляду конкретної задачі. Допустимо, що у нас є папка з чотирма файлами:
1 2 3 4 |
!AR01_061.TXT AR01_060.TXT AR01_061.TXT AR01_062.TXT |
Наша мета – отримати список з трьох файлів, які починаються з рядка “AR01_”. Для цього ми можемо скористатися функцією dir_ls
з пакету fs
, яка дозволяє виконувати операції з файловою системою в R.
1 2 3 4 5 6 |
library(fs) # Шлях до папки з файлами sciezka <- "шлях/до/папки" # Фільтрація файлів за початковим рядком у назві Duzy.rej <- dir_ls(paste0(sciezka, "/Duzy rejestrator/"), regexp = "(AR01_.)(.*\\.TXT$)") print(Duzy.rej) |
Після виконання цього коду ми отримаємо список з трьох файлів:
1 2 3 |
K:/Inne/WM/Duzy rejestrator/AR01_061.TXT K:/Inne/WM/Duzy rejestrator/!AR01_061.TXT K:/Inne/WM/Duzy rejestrator/AR01_062.TXT |
Проте, іноді потрібно дещо змінити регулярний вираз для фільтрації файлів. Наприклад, якщо ми додамо символ “^” до початку регулярного виразу, ми очікуватимемо, що він виключить файли, які не починаються на “AR01_”. Але результат може бути не таким, як очікувалося:
1 2 |
Duzy.rej <- dir_ls(paste0(sciezka, "/Duzy rejestrator/"), regexp = "^(AR01_.)(.*\\.TXT$)") print(Duzy.rej) |
Отриманий результат:
1 |
character(0) |
Початково виглядає, що “^” повинен виключити імена, які не починаються на “AR01_”. Однак, в даному випадку, його використання не привело до очікуваного результату. Це може бути пов’язано з особливостями реалізації регулярних виразів у мові програмування R.