R语言list.files函数使用问题求助:返回文件夹而非文件
解决R语言list.files遍历子文件夹文件的问题
嘿,我明白你的困扰了!你现在的问题在于没有遍历每个子文件夹去获取文件,而是直接在根目录调用list.files,自然拿不到子文件夹里的内容。咱们一步步来解决:
第一步:正确获取根目录下的子文件夹
你这部分的代码是对的,list.dirs确实能帮你拿到指定目录下的所有子文件夹:
dir_vec <- list.dirs(path = "E:/Louise/", full.names = FALSE, recursive = FALSE) dir_vec
这里full.names=FALSE返回的是文件夹的名称(不是完整路径),recursive=FALSE确保只拿当前目录下的子文件夹,不会深入嵌套目录。
第二步:遍历每个子文件夹获取文件
接下来需要逐个访问这些子文件夹,用list.files提取里面的文件。这里推荐用lapply来批量处理,代码更简洁:
# 遍历每个子文件夹,提取其中的文件 files_list <- lapply(dir_vec, function(sub_folder) { # 拼接子文件夹的完整路径 full_folder_path <- file.path("E:/Louise/", sub_folder) # 获取该文件夹下的所有文件(不递归,只拿当前层级的文件) list.files(path = full_folder_path, full.names = FALSE, recursive = FALSE) }) # 给列表命名,对应每个子文件夹,方便查看 names(files_list) <- dir_vec # 查看结果:每个元素对应一个子文件夹里的文件列表 files_list
可选:获取所有文件的完整路径
如果你想直接得到所有子文件的完整路径,不用分文件夹展示,可以用带递归参数的list.files,再过滤掉文件夹:
# 获取根目录下所有层级的文件和文件夹的完整路径 all_items <- list.files(path = "E:/Louise/", full.names = TRUE, recursive = TRUE) # 过滤掉文件夹,只保留文件 all_files <- all_items[!file.info(all_items)$isdir] all_files
为什么你原来的代码不行?
你之前写的files_vec<-list.files(path = "E:/Louise/",full.names=FALSE,recursive = FALSE...)是直接在根目录查询,recursive=FALSE意味着只看当前目录的内容。如果根目录下只有子文件夹(没有直接存放的文件),那这个调用要么返回空(默认include.dirs=FALSE,不显示文件夹),要么如果你不小心开了include.dirs=TRUE,才会返回文件夹名称——这显然不是你想要的子文件夹内的文件。
内容的提问来源于stack exchange,提问作者Vivien Leonard
相关产品推荐
相关产品推荐

