gpt4 book ai didi

将嵌套文件夹和文件名读取为嵌套列表

转载 作者:行者123 更新时间:2023-12-04 14:44:01 24 4
gpt4 key购买 nike

我正在尝试将已定义目录的所有文件夹和文件名读入一个嵌套列表,该列表与顶层文件夹的数量一样长,然后每个列表元素具有与子目录中一样多的元素(如果它是一个文件夹)等等,直到只有文件而没有更多文件夹的级别。

我的用例是我的 iTunes Music 文件夹:

m <- "/Users/User/Music/iTunes/iTunes Media/Music"  # set the path to the library folder
x <- list.files(m, recursive = FALSE) # get all artists names (folder names on top level)
# read all Albums and title of each song per album
lst <- setNames(lapply(paste(m, x, sep = "/"), list.files, recursive = T), x)
lst中各个元素的结构就是现在:
#$`The Kooks`                                       # artist name "The Kooks"
# [1] "Inside In Inside Out/01 Seaside.mp3" # album name "Inside In Inside Out", title "01 Seaside.mp3"
# [2] "Inside In Inside Out/02 See The World.mp3"
#...
#[16] "Konk/01 See The Sun.mp3" # second album of The Kooks
#[17] "Konk/02 Always Where I Need To Be.mp3"

我想要做的是让每个艺术家的条目嵌套在列表中,因此在示例中将有列表元素 $TheKooks它有 2 个(子)列表(每个专辑 1 个): $Inside In Inside Out$Konk并且每个专辑列表中都有一个标题名称向量(没有专辑名称)。

我在 SO 上(还)找不到正确的答案并尝试(失败),其中包括:
list.files(m, recursive = TRUE)


lapply(lst, function(l) {
strsplit(l, "/")
})

如何正确操作?

PS:
  • 您可以将所需的输出视为一个列表结构,其中每个文件/文件夹名称的出现频率与实际文件/文件夹中的出现频率相同。
  • 作为最好的情况,我希望找到一种解决方案,它足够灵活以允许不同的文件夹级别,并且不需要与文件夹深度一样多的显式 lapply 调用
  • 最佳答案

    以下函数标识目录中的文件和文件夹。然后它为每个识别的文件夹再次调用自己,创建一个包含找到的所有文件和子文件夹的列表。

    fileFun <- function(theDir) {
    ## Look for files (directories included for now)
    allFiles <- list.files(theDir, no.. = TRUE)
    ## Look for directory names
    allDirs <- list.dirs(theDir, full.names = FALSE, recursive = FALSE)
    ## If there are any directories,
    if(length(allDirs)) {
    ## then call this function again
    moreFiles <- lapply(file.path(theDir, allDirs), fileFun)
    ## Set names for the new list
    names(moreFiles) <- allDirs
    ## Determine files found, excluding directory names
    outFiles <- allFiles[!allFiles %in% allDirs]
    ## Combine appropriate results for current list
    if(length(outFiles)) {
    allFiles <- c(outFiles, moreFiles)
    } else {
    allFiles <- moreFiles
    }
    }
    return(allFiles)
    }
    ## Try with your directory?
    fileFun(m)

    关于将嵌套文件夹和文件名读取为嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27780593/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com