Переименование нескольких файлов с несколькими именами

#r #tidyverse #purrr #stringr

#r #tidyverse #муррр #stringr

Вопрос:

 setwd("C:\Users\...\Documents\Main\eml orders") 

files <- list.files(pattern="*.eml")

newfiles <- gsub(".eml$", ".txt", files)

file.rename(files, newfiles)

eml_files <- list.files(pattern = "txt$")
  

У меня есть этот код для преобразования файлов .eml в файлы .txt теперь я хочу переименовать те же файлы в строку, которую я создаю с помощью функции.

Пример функции

 fetch_date <- function(x) {
date <- paste0(as.character(Sys.time()), ".txt")
file.rename(x, date)
}
  

Теперь я пытаюсь map(eml_files, fetch_date)

И получите эту ошибку:

 cannot rename file '24 New order placed.txt' to '2020-11-14', reason 'The network path was not found'
  

Понятия не имею, что происходит, любая помощь будет оценена.

Комментарии:

1. Вам может понадобиться full.names = TRUE в list.files

2. Та же ошибка:/ .

3. Внутри функции может потребоваться указать путь с помощью file.path

4. я сделал file.path("C:\Users\...\Documents\Main\eml orders") внутри функции, и она все еще не работает. выдает одни и те же ошибки.

5. Кажется, что ваш file.rename работает вне функции. Вы пробовали второй набор переименований без функции

Ответ №1:

Имейте в виду, что ваша fetch_date функция выводит только одну строку ( Sys.date() ) . Он пытается назвать несколько .txt объектов с одинаковым именем. На моем Mac это приводит к тому, что последние файлы сохраняются, а остальные перезаписываются. Возможно, вы используете Windows, и при перезаписи файлов по умолчанию используется другое поведение?

 eml_files <- list.files(pattern = "txt$")


fetch_date <- function(x) {
  date <- paste0(as.character(Sys.time()), ".txt")
  file.rename(x, date)
}


map(eml_files, fetch_date)
  

введите описание изображения здесь

введите описание изображения здесь