首页 > 解决方案 > 如何使用文件夹名称重命名文件列表

问题描述

我有一个文件夹,其中包含来自老式计算机杂志的 5219 个扫描的 jpg 文件。("G:\M&K") 文件按年份分类(1979、1980、...、1988),然后按问题分类(1:6)。所以我的第一个问题的路径如下所示:“G:\M&K\1979\1”。

文件名的结构不完美,所以我需要按页码、年份和问题重命名它们。像这样的东西:[页码] [问题] [年份]。

我努力了:

files <- data.frame(list.files("G:/M&K", full.names = T, include.dirs = T, recursive = T, pattern = ".jpg"))

但这只会给我一个文件路径列表,它需要我过滤每一年和问题。

然后我试过了:

ordner_liste <- list.dirs("G:/M&K") %>%
  str_subset("/..../.")
filesliste <- rbind.data.frame(
  lapply(
    ordner_liste, function(
      ordner_oeffnen){
  list.files(
    ordner_liste)
}),ordner_liste)

但这给了我一个奇怪的数据框,它有 57 列包含第一个文件夹中的文件。

对我来说最好的情况是一个数据框,其中包含年份、问题和文件名的单独列。然后我的下一步是尝试重命名所有文件。

标签: rdataframerenametidyverselapply

解决方案


我认为你开始的方式很好。只需通过省略不需要的列来拆分斜线并将结果拆分为strsplit数据files/rbind

files <- data.frame(V1=list.files("V:/M&K", full.names=T, include.dirs=T, 
                               recursive=T, pattern=".jpg"))


res <- setNames(do.call(rbind.data.frame, strsplit(files$V1, "/"))[-(1:2)],
         c("year", "issue", "file"))

结果

res
#    year issue   file
# 1  1979    01 01.jpg
# 2  1979    01 02.jpg
# 3  1979    01 03.jpg
# 4  1979    02 01.jpg
# 5  1979    02 02.jpg
# 6  1979    02 03.jpg
# 7  1979    03 01.jpg
# 8  1979    03 02.jpg
# 9  1979    03 03.jpg
# 10 1980    01 01.jpg
# 11 1980    01 02.jpg
# 12 1980    01 03.jpg
# 13 1980    02 01.jpg
# 14 1980    02 02.jpg
# 15 1980    02 03.jpg
# 16 1980    03 01.jpg
# 17 1980    03 02.jpg
# 18 1980    03 03.jpg
# 19 1981    01 01.jpg
# 20 1981    01 02.jpg
# 21 1981    01 03.jpg
# 22 1981    02 01.jpg
# 23 1981    02 02.jpg
# 24 1981    02 03.jpg
# 25 1981    03 01.jpg
# 26 1981    03 02.jpg
# 27 1981    03 03.jpg

通过根据您的描述创建文件夹结构进行测试。


推荐阅读